SpringBean(配置、实例化、作用域、生命周期、装配方式)

简介: SpringBean(配置、实例化、作用域、生命周期、装配方式)

SpringBean(配置、实例化、作用域、生命周期、装配方式)


Bean的配置

Spring相当于一个大型的工厂,用于生产和管理Spring容器中的Bean。如果要使用这个工厂生产和管理Bean,需要开发者将Bean配置在Spring的配置文件中。

有两种配置方式:

(1)XML格式的配置 在实际开发中常用
(2)Properties

Bean的实例化

在面向对象编程中,如果想使用某个对象,需要先实例化该对象。

Spring框架实例化Bean有三种方式:

(1)构造方法实例化:Spring容器可以调用Bean对应类中的无参构造方法来实 例化Bean。

**(2)静态工厂实例化:**使用时要求开发者在工厂类中创建一个静态方法来创建Bean实例。在配置Bean时,class属性定义静态工厂类,同时还要需要使用factory-method属性指定工厂中的静态方法。

**(3)实例化工厂实例化:**使用时要求开发者在工厂类中创建一个实例方法来创建Bean的实例。在配置Bean时,需要使用factory-bean属性指定配置的实例工厂,同时还需要factory-method属性指定实例工厂中的实例方法。

Bean的作用域

Spring5.0中为Bean的实例定义了作用域。如下图:

image.png

在表中的6中作用域中,singleton和prototype是最常用的两种。

Bean的生命周期

一个对象的生命周期包括创建(实例化与初始化)、使使用以及销毁等阶段,在 Spring中, Bean 对象周期也遵循这一过程,但是 Spring 提提供了许多对外接口,允许开发者对三个过程(实例化、初始化、销毁)的前后做一些操作作。在 Spring Bean 中,实例化是为 Bean对象开辟空间,初始化则是对属性的初始化.

Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下, Spring 能

精确地知道 Bean 何时战创建,何时初始化完成,以及及何时被销毁。而对于prototype 作的的 Bean , Spring 只负责创建,当容器创建了 Bean 的实实例后, Bean 实例就交给了客户 N 的代码管理, Spring 容器将不再跟踪其生命周期,并且组不会管理那些被配置成 prototype 作脚城的 Bean . Spnng 中 Bean 的生命周期的执行是一个很复杂复杂的过程,可借鉴 Servlet 的生命周期“实例化一初始化( init )一接收请求( service )一销销毁( destroy )”来理解 Bean 的生命周期。

Bean 的生命周期的整个过程如下:

( I )根据 Bean 的配置情况实例化一个 Bean 。

(2)根据 Spring 上下文对实例化的 Bean 进行行依赖注入,即对 Bean 的属性进行初

始化。

(3)如果 Bean 实现了 BeanNameAware 接口,将调用它实现的 setBeanName ( String bcanld )方法,此处参数传递的是 Spring 配配置文件中 Bcan 的 id 。

(4)如果 Bean 实了 BeanFactoryAware 接口,将调用它实现的 settBeanFactory 方法,此处参数传递的是当前 Spring 工厂实例的的引用。

(5)如果 Bean 实现了 ApplicationCiContextAware 按口,将调用它实现的 setApplicationContext(ApplicationContext )方法,此处参数传递的是 Spring 上下文实例的引用。

(6)如果 Bean 关联了 BeanPostProcessor 接口,将调用初初始化方洗postProcess

BeforelnitializationfObject obj , Strirings )对 Bean 进行操作。

(7)如果 Bean 实现了 InitializingBeanin 接口,将调用 afterPropertiesSet 方法。

(8)如果 Bean 在 Spring 配置文件中配置了 init - method 属性,将自动调用其配置的初始化方法。

(9)如果 Bean 关联了 BeanPostProcesassor 接口,将调用postProcessAfteterInitializat0l( Object obj , String s )方法,由于是在 Bean 初初始化结東时调用 After 方法,也可用于内存或缓存技术。

注意:以上工作完成后就可以使用该 Bean ,由于该 Bean 的作用城是 singleton ,所以调用的是同一个Bean实施。

(10)当 Bean 不再需要时将进入销毁阶段,如如果 Bean 实现了 DisposableBean 接口,则调用其实现的 destroy 方法将 Springng 中的 Bean 销毀。

(11)如果在配置文件中通过 destroy - method 属性指定了 Bean 的销毁方法,将调用其配置的销毁方法进行销毁。

在 Spring 中,通过实现特定的接口或通过< bean >元素的属性设置可以对 Bean 的生命周期过程产生影响。开发者可以随意地配置< bean >元素的属性,但不建议过多地使用 Bean 实现接口,因为这样将使代码和 Spring 聚合比较紧密。

Bean的装配方式

Bean的装配方式(即Bean的依赖注入的方式),大体分为两种:


Bean的装配方式
(1) 基于XML的配置的装配
(2) 基于注解的装配

为什么基于注解的装配是常用的?

尽管XML可以简单的装配Bean,但是如果有大量的Bean需要装配,会导致XML文件过于庞大,不方便以后的升级与维护。

接下介绍基于注解装配的七种常用注解,以及应用位置

(1)@Component

该注解是一个泛化的概念,仅仅表示一个组件对象(Bean),可以作用在任何层次上。

(2)@Repository

该注解用于将数据访问层(Dao层)的类标识为Bean,即注解数据访问层Bean,其功能与@Componet相同

(3)@Service

该注解用于标注一个业务逻辑组件类(Service层),其功能与@Component相同

(4)@Controller

该注解用于标注一个控制器组件类(SpringMVC的Controller),其功能与@Componet相同

(5)@Autowired

该注解可以对类成员变量、方法及构造方法进行标注,完成自动装配的功能。通过使用@Autowired来消除setter和getter方法。默认按照Bean的类型进行装配。

(6)@Resource

该注解与@Autowired的功能一样,区别在于该注解默认是按照名称来装配的,只有当找不到与名称匹配的Bean时才会按照类型来装配注入;而@Autowired默认按照Bean的类型进行装配,如果想按照名称来装配注入,则需要和@Qualifier注解一起使用。

@Resource注解有两个属性—name和type。name属性指定Bean实例名称,即按照名称来装配注入;type属性指定Bean类型,即按照Bean的类型进行装配。

(7)@Qualifier

该注解与@Autowired注解配合使用。当@Autowired注解需要按照名称来装配注入时,需要和该注解一起使用,Bean的实例名称由@Qualifier注解的参数指定。

相关文章
|
3月前
|
XML Java 数据格式
SpringBean的生命周期
SpringBean的生命周期
45 0
|
3月前
|
前端开发 Java 开发者
Bean的生命周期和作用域
Bean的生命周期和作用域
|
3月前
|
XML Java 数据格式
Spring框架学习 -- Bean的生命周期和作用域
Spring框架学习 -- Bean的生命周期和作用域
35 2
|
3月前
|
存储 设计模式 Java
Bean 作用域和生命周期
Bean 作用域和生命周期
|
3月前
|
XML Java 数据格式
spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解
spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解
50 0
|
3月前
|
XML Java 数据格式
怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象
怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象
52 0
|
10月前
|
Java 容器 Spring
bean的作用域和生命周期和后置处理器以及作用域对生命周期的影响~
bean的作用域和生命周期和后置处理器以及作用域对生命周期的影响~
|
12月前
|
存储 安全 Java
Bean 的作用域和生命周期
Bean 的作用域和生命周期
54 1
|
XML 安全 Java
Bean作用域和生命周期
Bean作用域和生命周期
|
Java 测试技术 Spring
更简单的取 Bean 对象(对象装配)(下)
更简单的取 Bean 对象(对象装配)(下)