对Spring Bean的理解

tim-qtp...大约 2 分钟Spring框架

什么是Bean?

  1. 由spring ioc容器管理的对象称为bean;

  2. 定义bean有哪些方式:xml注解(@Controller控制层,@Service逻辑层,@Repository数据访问层,@Component)组件的名称默认是类名首字母小写,java配置

  3. 如何加载:

    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 属性,指定清理逻辑。