Spring核心总结介绍

Spring核心总结介绍

一、 IoC(Inversion of control): 控制反转

1IoC

概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系

核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean

2bean工厂创建bean的三种方式:

u 通过构造方法直接创建:

<bean id=”” class=”bean class name”>

u 通过静态工厂方法创建:

<bean id=”” class=”factory class name” factory-method=””>

u 通过非静态工厂方法创建:

<bean id=”factory” class=”factory class name”>

<bean id=”” factory-bean=” factory” factory-method=””>

3Spring中实现IoC的方式:依赖注入(Dependency Injection

Spring中依赖注入的两种方式:

u 通过setter方法注入:

<property name=””></property>

其中,name属性的取值依setter方法名而定

u 通过构造方法注入:

<constructor-arg index=””></ constructor-arg>

其中,index表示构造方法中的参数索引(第一个参数索引为0)

4、设置属性时可选的标签:

n value:基本类型(封装类型)或String类型

n ref:引用工厂中其它的bean

n listList或数组类型

n setSet类型

n mapMap类型

n propsProperties类型

5、自动装配:自动将某个bean 注入到另一个bean的属性当中

bean标签的autowire属性)

6、依赖检查:检查bean的属性是否完成依赖关系的注入

bean标签的dependency-check属性)

7、生命周期方法:

init-method(也可实现接口org.springframework.beans.factory.InitializingBean

destroy-method(也可实现接口DisposableBean)

8、单例bean:默认情况下,从bean工厂所取得的实例为Singleton

beansingleton属性)

9Aware相关接口:可以通过实现Aware接口来获得Spring所提供的资源

l org.springframework.beans.factory.BeanNameAware

l org.springframework.beans.factory.BeanFactoryAware

l org.springframework.context.ApplicationContextAware

10ApplicationContext的功能扩展:

1BeanPostProcessor:若想在Springbean完成依赖注入之后,再补充一些后续操作,则可以定义一个bean类来实现接口:org.springframework.beans.factory.config.BeanPostProcessor,然后在配置文件中定义该bean类;从而Spring容器会在每一个bean被初始化之前、之后分别执行实现了该接口的bean类的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法;

2BeanFactoryPostProcessor

l CustomEditorConfigurer:可借助实现了接口java.beans.PropertyEditor的类,并依据当中的实现,将字符串类型转换为指定类型的对象;

l PropertyPlaceholderConfigurer:可将配置文件中属性值用“${key}”形式表示,则会将其值替换成指定的属性文件中key所对应的value

l PropertyOverrideConfigurer:可借助该类在指定的属性文件中设定一些优先的属性(将忽略配置文件中对应属性的设定值);

(注意:属性文件中设定属性值的格式为:beanName.propertyName=value

3) 国际化消息的支持:可通过ApplicationContextgetMessage()方法获得指定资源文件中的消息;配置如下:

<bean

id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

<property name="basename">

<value>first/msg</value>

</property >

</bean>

4) 事件的支持:

可发布的事件:ApplicationEvent

发布事件的方法:publishEventApplicationEvent

事件监听接口:ApplicationListener

11ApplicationContext管理bean的执行阶段:

l 创建bean

l 属性注入(依赖关系的注入);

l BeanNameAware接口实现类的setBeanName()方法;

l BeanFactoryAware接口实现类的setBeanFactory()方法;

l ApplicationContextAware接口实现类的setApplicationContext()方法;

l BeanPostProcessor接口实现类中的postProcessBeforeInitialization()方法;

l InitializingBean接口实现类的afterPropertiesSet()方法;

l Bean定义文件中init-method属性所指定的方法;

l BeanPostProcessor接口实现类中的postProcessAfterInitialization()方法;

12FactoryBean:用来创建bean

 <bean id="myObject" 
  class="org.springframework.beans.factory.config.
 MethodInvokingFactoryBean">

<property name="staticMethod">

<value>com.whatever.MyClassFactory.getInstance</value>

</property>

</bean>

(注意:通过bean工厂的getBean(myObject)得到的是FactoryBean所生产的产品;getBean(&myObject)得到的是FactoryBean实例本身)

二、AOP(Aspect-Oriented Programming): 面向方面编程

1、代理的两种方式:

静态代理:

l 针对每个具体类分别编写代理类;

l 针对一个接口编写一个代理类;

动态代理:

针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类

2、AOP的主要原理:动态代理

3、AOP中的术语:

l Aspect:方面,层面

l Joinpoint:结合点、联结点;加入业务流程的点或时机