Spring的三大核心思想

Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)。

(1)IOC(控制反转)

      实现将组件间的关系从程序内部提到外部容器(spring的xml)来管理。

首先外部容器(spring.xml)中会动态的注册业务所需的对象(接口/类)

(2)DI(依赖注入)

组件之间的依赖关系由容器在应用系统运行期来决定, 也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中

范例:

如: 注入xml中

<bean id= "animal"   class = "phz.springframework.test.Cat" >   
       <property name= "name"  value= "kitty"  />     </bean>

类1:public class Cat implements Animal {       

private  String name;      
public   void  say() {      
System.out.println("I am " + name + "cat");   
 }    

  public   void  setName(String name) {         

this.name = name;     }  

 }  

类2:

public class Dog implements Animal {       

private String name;      
public void say() {      
System.out.println("I am " + name + "dog");   
 }    

 public void setName(String name) {         

this.name = name;     }  

}  

public interface Animal {   

  public void say();   

}  

通过获取容器注册的方法

ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");    

      Animal animal = (Animal) context.getBean("animal");   //只要这里xml注入的animal变化,就可以控制不同的更改变化

      animal.say(); 

如果注入bean时,把name值也注入进入了,那这里的值就动态变化了。

<property name = "name" value = "haha"></property>  

其实DI就是IOC(控制反转)后,直接注入了其具体的数值

(3) AOP(面向切面编程) 

  利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用"横切"技术,AOP把软件系统分为两个部分:核心关注点横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

public interface HelloWorld{ void printHelloWorld(); void doPrint();}

public class HelloWorldImpl1 implements HelloWorld{ public void printHelloWorld() { System.out.println("Enter HelloWorldImpl1.printHelloWorld()"); } public void doPrint() { System.out.println("Enter HelloWorldImpl1.doPrint()"); return ; }}

public class HelloWorldImpl2 implements HelloWorld{ public void printHelloWorld() { System.out.println("Enter HelloWorldImpl2.printHelloWorld()"); } public void doPrint() { System.out.println("Enter HelloWorldImpl2.doPrint()"); return ; }}

public class TimeHandler{ public void printTime() { System.out.println("CurrentTime = " + System.currentTimeMillis()); }}

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

<bean id="helloWorldImpl1" class="com.xrq.aop.HelloWorldImpl1" />

<bean id="helloWorldImpl2" class="com.xrq.aop.HelloWorldImpl2" />

<bean id="timeHandler" class="com.xrq.aop.TimeHandler" />

<aop:config>

<aop:aspect id="time" ref="timeHandler">

<aop:pointcut id="addAllMethod" expression="execution(* com.xrq.aop.HelloWorld.*(..))" />

<aop:before method="printTime" pointcut-ref="addAllMethod" />

<aop:after method="printTime" pointcut-ref="addAllMethod" />

</aop:aspect>

</aop:config>

</beans>

结果调用:

ApplicationContext ctx = new ClassPathXmlApplicationContext("aop.xml");

HelloWorld hw1 = (HelloWorld)ctx.getBean("helloWorldImpl1");

HelloWorld hw2 = (HelloWorld)ctx.getBean("helloWorldImpl2");

hw1.printHelloWorld();

hw1.doPrint();

System.out.println();

hw2.printHelloWorld();

hw2.doPrint();

最后结果:

CurrentTime = 1446129611993Enter

HelloWorldImpl1.printHelloWorld()

CurrentTime = 1446129611993


CurrentTime = 1446129611994Enter

HelloWorldImpl1.doPrint()

CurrentTime = 1446129611994


CurrentTime = 1446129611994

Enter HelloWorldImpl2.printHelloWorld()

CurrentTime = 1446129611994


CurrentTime = 1446129611994

Enter HelloWorldImpl2.doPrint()

CurrentTime = 1446129611994

Spring Boot的核心思想是简化和加速Spring应用程序的开发过程。它通过约定优于配置、自动配置和快速启动等特性,旨在提供一个开箱即用的开发平台。 以下是Spring Boot的核心思想: 1. 约定优于配置(Convention Over Configuration):Spring Boot通过一系列默认约定,减少了开发者在配置方面的工作量。它遵循一套默认的配置规则,使得应用程序的开发变得简单和高效。 2. 自动配置(Auto-configuration):Spring Boot通过自动分析应用程序的依赖和环境,自动配置相应的组件和功能。它根据类路径上的库、配置文件和其他因素,自动设置必要的Bean,从而减少了手动配置的需要。 3. 快速启动(Opinionated Starters):Spring Boot提供了一系列"Starter"依赖,它们是预定义的依赖集合,用于快速启动常见类型的应用程序。这些"Starter"依赖包含了所需的依赖和配置,只需引入相应的Starter依赖,即可快速搭建一个功能完备的应用程序。 4. 内嵌式容器(Embedded Container):Spring Boot内置了常用的Servlet容器(如Tomcat、Jetty),使得应用程序可以作为独立的jar包或war包运行,无需外部Web服务器的支持。 5. 简化的配置(Simplified Configuration):Spring Boot采用了一种更简洁、更易于理解的配置方式,如采用属性文件(application.properties)或YAML文件进行配置,使得配置变得更加清晰和易于维护。 总而言之,Spring Boot的核心思想是通过约定优于配置、自动配置和快速启动等特性,简化了Spring应用程序的开发过程,提供了一个高效、便捷的开发平台。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值