初识Spring框架

# Spring的两大特征

1. IOC,即控制反转

- IOC也叫依赖注入(Dependency Injection),是一种设计思想。在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用和依赖,代码将会变得异常难以维护和极度的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些相互依赖对象的创建、协调工作交给Spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。在这样的角度上来看,获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源。

2. AOP,面向切面编程

- 往往被定义为促使软件系统实现关注点的分离的技术。系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

# Bean的作用域

1. singleton:单例,指一个Bean容器中只存在一份。

2. prototype:每次请求创建新的实例,destroy方式不生效。

3. request:每次http请求创建一个实例且仅在当前request内有效。

4. session:同上,每次http请求创建,当前session内有效。

5. global session:基于portlet的web中有效(portlet定义了global session),如果实在web中,通session。

# Bean的生命周期

- 定义

- 初始化

- 使用

- 销毁

Bean实例生命周期的执行过程如下:

1. Spring对bean进行实例化,默认bean是单例;

2. Spring对bean进行依赖注入;

3. 如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;

4. 如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;

5. 如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;

6. 如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;

7. 如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;

8. 如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;

9. 此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;

10. 若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;

# Bean的自动装配

1. No:不做任何操作。

2. byname:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。

3. byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型的bean,那么抛出异常,并指出不能使用byType方式进行自动装配;

如果没有找到相匹配的bean,则什么事都不发生。

4. Constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常。

# Spring管理事务的方式

1. 编程式事务,在代码中硬编码。(不推荐使用)

2. 声明式事务,在配置文件中配置。(推荐使用)

   * 基于XML的声明式事务

   * 基于注解的声明式事务

猜你喜欢

转载自blog.csdn.net/N2H4N2H4/article/details/81942669