对Spring Bean的理解
什么是Bean?
由spring ioc容器管理的对象称为bean;
定义bean有哪些方式:xml,注解(@Controller控制层,@Service逻辑层,@Repository数据访问层,@Component)组件的名称默认是类名首字母小写,java配置
如何加载:
spring启动以后,Spring 将 配置内容对应的 Bean 的定义信息(如类名、作用域、依赖关系等)封装为
BeanDefinition
对象,并注册到BeanFactory
中(通常是DefaultListableBeanFactory
)以便后续的Bean实例化和管理,这样spring创建对象的时候就不需要再次去读取和解析这些配置文件了;然后这个时候,BeanFactory也创建了;
接下来就得实例化Bean(也就是属性赋值)了,Spring根据
BeanDefinition
中的类信息,通过反射创建Bean实例。如果Bean有构造函数注入的依赖,Spring会先解析这些依赖,并在实例化时注入。依赖注入:对于通过
@Autowired
、@Resource
或@Inject
注解的依赖,Spring会在实例化后进行注入。Spring会查找匹配的Bean,并将其注入到目标Bean的字段、构造函数或方法中。Bean后处理器处理: Bean 初始化前后,Spring 会调用所有实现了
BeanPostProcessor
接口的 Bean,允许它们对 Bean 进行额外的处理(如动态代理、AOP增强等),常见的 BeanPostProcessor:如AutowiredAnnotationBeanPostProcessor
(处理@Autowired
注解)、CommonAnnotationBeanPostProcessor
(处理@Resource
等注解)。初始化 Bean:如果 Bean 实现了
InitializingBean
接口,Spring 会调用afterPropertiesSet()
方法。如果 Bean 定义了自定义的初始化方法(通过@PostConstruct
注解或 XML 配置中的init-method
属性),Spring 会调用该方法。初始化完成后,Bean进入“就绪”状态,可以被其他Bean使用。Bean 使用:经过上述步骤后,Bean 已经准备好被应用程序使用。其他 Bean 或组件可以通过依赖注入的方式使用该 Bean。
销毁 Bean:如果 Bean 实现了
DisposableBean
接口,Spring 会在容器关闭时调用destroy()
方法。开发者也可以通过@PreDestroy
注解或配置中的destroy-method
属性,指定清理逻辑。
