当前位置:首页 > 经验 >

bean的基本知识(bean注解的使用方法)

来源:原点资讯(www.yd166.com)时间:2022-11-01 13:48:16作者:YD166手机阅读>>

7.指定bean引用

bean的基本知识,bean注解的使用方法(5)

8、ref local指定同一个xml文件中的引用

二、bean的生命周期

bean的基本知识,bean注解的使用方法(6)

beanfactory中bean的生命周期图

2.1 实例bean

1.当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例化Bean之前,将调用接口的postProcessBeforeInstantiation()方法;

2.根据配置情况调用Bean构造函数或工厂方法实例化Bean;

3.如果容器注册了InstantiationAwareBeanPostProcessor接口,在实例化Bean之后,调用该接口的postProcessAfterInstantiation()方法,可在这里对已经实例化的对象进行一些"梳妆打扮";

4.如果Bean配置了属性信息,容器在这一步着手将配置值设置到Bean对应的属性中,不过在设置每个属性之前将先调用InstantiationAwareBeanPostProcessor接口的postProcessPropertyValues()方法;

2.2 初始化和使用bean

1:BeanNameAware的setBeanName():

如果Bean类有实现org.springframework.beans.BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。

2:BeanFactoryAware的setBeanFactory():

如果Bean类有实现org.springframework.beans.factory.BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。

3:BeanPostProcessors的ProcessBeforeInitialization()

如果有org.springframework.beans.factory.config.BeanPostProcessors和Bean关联,那么其postProcessBeforeInitialization()方法将被将被调用。

4:initializingBean的afterPropertiesSet():

如果Bean类已实现org.springframework.beans.factory.InitializingBean接口,则执行他的afterProPertiesSet()方法

5:Bean定义文件中定义init-method:

可以在Bean定义文件中使用"init-method"属性设定方法名称例如:

如果有以上设置的话,则执行到这个阶段,就会执行initBean()方法

6:BeanPostProcessors的ProcessaAfterInitialization()

如果有任何的BeanPostProcessors实例与Bean实例关联,则执行BeanPostProcessors实例的ProcessaAfterInitialization()方法

BeanPostProcessor后处理器定义了两个方法:

其一是postProcessBeforeInitialization()在第8步调用;其二是Object postProcessAfterInitialization(Object bean, String beanName)方法,这个方法在此时调用,容器再次获得对Bean进行加工处理的机会;

如果在<bean>中指定Bean的作用范围为scope="prototype",将Bean返回给调用者,调用者负责Bean后续生命的管理,Spring不再管理这个Bean的生命周期。如果作用范围设置为scope="singleton",则将Bean放入到Spring IoC容器的缓存池中,并将Bean引用返回给调用者,Spring继续对这些Bean进行后续的生命管理;

2.2 销毁bean

此时,Bean已经可以被应用系统使用,并且将保留在BeanFactory中知道它不在被使用。有两种方法可以将其从BeanFactory中删除掉

1:DisposableBean的destroy()

在容器关闭时,如果Bean类有实现org.springframework.beans.factory.DisposableBean接口,则执行他的destroy()方法

2:Bean定义文件中定义destroy-method

在容器关闭时,可以在Bean定义文件中使用"destroy-method"属性设定方法名称,例如:

如果有以上设定的话,则进行至这个阶段时,就会执行destroy()方法,如果是使用ApplicationContext来生成并管理Bean的话则稍有不同,使用ApplicationContext来生成及管理Bean实例的话,在执行BeanFactoryAware的setBeanFactory()阶段后,若Bean类上有实现org.springframework.context.ApplicationContextAware接口,则执行其setApplicationContext()方法,接着才执行BeanPostProcessors的ProcessBeforeInitialization()及之后的流程。

三、Beanfactory中bean生命周期实例

下面我们来看看一个实例吧,自己新建一个工程,导入需要的Spring包,然后建立如下Worker.java(这里是bean初始化和使用时会用到的函数 )

bean的基本知识,bean注解的使用方法(7)

bean的基本知识,bean注解的使用方法(8)

栏目热文

springboot启动原理面试(spring boot自动启动原理面试)

springboot启动原理面试(spring boot自动启动原理面试)

SpringBoot的启动流程不管是用springboot开发还是面试,都需要对SpringBoot的启动流程所了解。下...

2022-11-01 14:22:24查看全文 >>

java中bean的生命周期(怎么理解java中的bean)

java中bean的生命周期(怎么理解java中的bean)

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周...

2022-11-01 14:23:53查看全文 >>

类加载的5个过程详解(类加载器和双亲委派机制)

类加载的5个过程详解(类加载器和双亲委派机制)

# 类加载过程加载, 验证, 准备, 解析, 初始化下面依次说说...

2022-11-01 14:04:06查看全文 >>

...

1970-01-01 08:00:00查看全文 >>

springboot三大核心原理(spring boot核心技术笔记)

springboot三大核心原理(spring boot核心技术笔记)

Spring Boot核心原理通过上篇的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Bo...

2022-11-01 13:55:26查看全文 >>

springbean生命周期(spring三大核心原理)

springbean生命周期(spring三大核心原理)

1.Bean生命周期简单概述 2.BeanPostProcessor作用 3.BeanPostProcessor实现增强...

2022-11-01 13:49:32查看全文 >>

spring bean生命周期面试题(简述spring bean生命周期)

spring bean生命周期面试题(简述spring bean生命周期)

今天阿粉给大家带来的是关于Spring的另外的一道高频面试题,而且是非常非常高频的面试题,那就是Spring中的Bean...

2022-11-01 14:23:58查看全文 >>

springboot自动配置原理(springboot注解大全)

springboot自动配置原理(springboot注解大全)

配置文件能写什么?相信接触过 SpringBoot 的朋友都知道 SpringBoot 有各种 starter 依赖,想...

2022-11-01 13:42:12查看全文 >>

spring三级缓存(spring三级缓存图解)

spring三级缓存(spring三级缓存图解)

1. 循环依赖什么是依赖注入?假设有两个类A和B,A在实例化的时候需要B的实例,而B在实例化时又需要A的实例,在类的实例...

2022-11-01 14:08:09查看全文 >>

java bean 生命周期(spring生命周期图解)

java bean 生命周期(spring生命周期图解)

1. 引言“请你描述下 Spring Bean 的生命周期?”,这是面试官考察 Spring 的常用问题,可见是 Spr...

2022-11-01 14:15:39查看全文 >>

文档排行