Spring - IOC - Bean生命周期

Spring - Bean生命周期

在Spring框架中,Bean的生命周期是指从Bean的实例化开始直到销毁的过程。下面是一个典型的Spring Bean的生命周期:

  1. 实例化:

    • Spring容器根据配置信息(如XML配置文件或注解)创建Bean的实例。
    • 如果Bean是通过构造器注入,那么会调用相应的构造器来创建实例;如果是无参构造器,则直接调用默认构造器。
  2. 属性填充:

    • Spring根据配置信息将其他Bean注入到当前Bean的属性中。
    • 对于@Autowired注解的字段,Spring会查找并注入匹配的Bean。
  3. Aware接口回调:

    • 如果Bean实现了BeanNameAware,则调用setBeanName(String name)方法。
    • 如果Bean实现了BeanFactoryAware,则调用setBeanFactory(BeanFactory factory)方法。
    • 如果Bean实现了ApplicationContextAware,则调用setApplicationContext(ApplicationContext context)方法。
  4. 后置处理器回调:

    • 如果有BeanPostProcessor实现类注册在容器中,它们的postProcessBeforeInitialization(Object bean, String beanName)方法会被调用。
  5. 初始化方法调用:

    • 如果Bean定义了init-method属性,那么对应的初始化方法会被调用。

      @Component
      public class A {
          @PostConstruct  //等价与init-method
          public void init() {
              System.out.println("初始化--->@PostConstruct");
          }
      }
      
    • 如果Bean实现了InitializingBean接口,那么afterPropertiesSet()方法会被调用。

      @Component
      public class A implements InitializingBean {
      
          @Override
          public void afterPropertiesSet() throws Exception {
              System.out.println("初始化--->InitializingBean");
          }
      }
      
  6. 后置处理器再次回调:

    • 如果有BeanPostProcessor实现类注册在容器中,它们的postProcessAfterInitialization(Object bean, String beanName)方法会被调用。
  7. Bean可用:

    • Bean现在可以被其他Bean使用,或者处理请求。
  8. 销毁:

    • 当Spring容器关闭时,如果Bean定义了destroy-method属性,那么对应的销毁方法会被调用。

      @Component
      public class A {
          @PreDestroy
          public void destroy() {
              System.out.println("销毁--->@PreDestroy");
          }
      }
      
    • 如果Bean实现了DisposableBean接口,那么destroy()方法会被调用。

      @Component
      public class A implements DisposableBean {
      
          @Override
          public void destroy() throws Exception {
              System.out.println("销毁--->DisposableBean");
          }
      }
      
Spring-IOCSpring框架的核心部分之一,它是一种设计模式,全称为Inversion of Control(控制反转)。它通过将对象的创建、依赖关系的管理和对象的生命周期交给Spring容器来实现,从而降低了组件之间的耦合度,提高了代码的可重用性和可维护性。Spring-IOC的实现主要依靠Spring容器,Spring容器是Spring框架的核心,它负责创建、管理和装配Bean对象,其中Bean是Spring框架中最基本的组件。 Spring-IOC的实现主要有两种方式:BeanFactory和ApplicationContext。其中,BeanFactory是Spring-IOC的基本实现,而ApplicationContext是BeanFactory的子接口,提供了更多高级特性。ApplicationContext是Spring框架中最常用的IOC容器,它除了提供BeanFactory的所有功能外,还提供了更多的企业级特性,例如AOP、事务管理、国际化、事件传播等。 下面是一个简单的Spring-IOC的例子,假设我们有一个UserService接口和一个UserServiceImpl实现类,我们可以通过Spring-IOC容器来创建和管理UserServiceImpl对象: 1.定义UserService接口和UserServiceImpl实现类 ```java public interface UserService { void addUser(User user); } @Service public class UserServiceImpl implements UserService { @Override public void addUser(User user) { // 添加用户的具体实现 } } ``` 2.在Spring配置文件中配置UserService实例 ```xml <bean id="userService" class="com.example.service.UserServiceImpl"/> ``` 3.在代码中获取UserService实例并使用 ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = context.getBean("userService", UserService.class); User user = new User(); userService.addUser(user); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值