invokeInitMethods方法——(九)

1、作用

        扩展

protected void invokeInitMethods(String beanName, Object bean, @Nullable RootBeanDefinition mbd)
      throws Throwable {

   boolean isInitializingBean = (bean instanceof InitializingBean);
   // 如果这个bean是InitializingBean的子类,则执行afterPropertiesSet方法
   if (isInitializingBean && (mbd == null || !mbd.hasAnyExternallyManagedInitMethod("afterPropertiesSet"))) {
      if (logger.isTraceEnabled()) {
         logger.trace("Invoking afterPropertiesSet() on bean with name '" + beanName + "'");
      }
      if (System.getSecurityManager() != null) {
         try {
            AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
               ((InitializingBean) bean).afterPropertiesSet();
               return null;
            }, getAccessControlContext());
         }
         catch (PrivilegedActionException pae) {
            throw pae.getException();
         }
      }
      else {
         ((InitializingBean) bean).afterPropertiesSet();
      }
   }
    // RootBeanDefinition不为空且有afterPropertiesSet这个方法,则执行下面的
   if (mbd != null && bean.getClass() != NullBean.class) {
      String initMethodName = mbd.getInitMethodName();
      if (StringUtils.hasLength(initMethodName) &&
            !(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) &&
            !mbd.hasAnyExternallyManagedInitMethod(initMethodName)) {
         invokeCustomInitMethod(beanName, bean, mbd);
      }
   }
}

2、这个Person类我在配置文件中已经设置了了。所有spring会识别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring 框架中的生命周期是一种控制应用程序对象的方式,它有助于控制对象的创建、初始化、配置、装配、激活、使用、销毁等状态。生命周期的详细源码如下:// 创建bean的实例 public Object createBean(String beanName) { // 实例化bean Object beanInstance = instantiateBean(beanName); // 从配置文件中获取bean的属性 populateBean(beanName, beanInstance); // 对bean进行初始化 initializeBean(beanName, beanInstance); // 将bean实例放入容器中 registerDisposableBeanIfNecessary(beanName, beanInstance); return beanInstance; }// 初始化bean public void initializeBean(String beanName, Object beanInstance) { invokeAwareMethods(beanName, beanInstance); // 对bean进行属性注入 applyPropertyValues(beanName, beanInstance); // 调用初始化方法 invokeInitMethods(beanName, beanInstance); }// 销毁bean public void destroyBean(String beanName, Object beanInstance) { // 调用销毁方法 invokeDestroyMethods(beanName, beanInstance); // 移除bean实例 unregisterDisposableBeanIfNecessary(beanName, beanInstance); } ### 回答2: Spring框架是一个开源的Java应用程序框架,它提供了一种灵活的方式来开发企业级应用程序。Spring框架中包含了一个核心容器,用于管理应用程序中的对象的生命周期。 首先,Spring框架提供了BeanFactory接口和ApplicationContext接口,它们都是用来管理Bean对象的生命周期的,并且都有默认实现类DefaultListableBeanFactory和AnnotationConfigApplicationContext。这些类负责从配置文件或注解中读取Bean定义,并创建和管理Bean对象。 在Spring框架中,Bean的生命周期可以分为以下几个阶段:实例化、属性注入、初始化、销毁。 实例化阶段是指在容器中创建Bean对象的过程。Spring框架通过使用反射机制实例化Bean对象,当容器启动时,它会根据配置文件或注解中的信息创建Bean对象。 属性注入阶段是指将配置文件或注解中的属性值注入到Bean对象中的过程。Spring框架提供了多种方式来实现属性注入,包括构造器注入、Setter方法注入和注解注入。 初始化阶段是指在Bean对象创建完成后,进行一些初始化操作的过程。Spring框架提供了InitializingBean接口和@PostConstruct注解,可以在Bean对象创建完成后执行自定义的初始化方法。 销毁阶段是指在容器关闭或Bean对象不再被使用时,进行销毁操作的过程。Spring框架提供了DisposableBean接口和@PreDestroy注解,可以在Bean对象销毁前执行自定义的销毁方法。 总的来说,Spring框架中的生命周期源码主要涉及到Bean的创建、属性注入、初始化和销毁这些过程。这些源码通过反射机制、配置文件和注解来实现,提供了灵活性和可扩展性,使得开发者可以方便地管理和控制应用程序中的对象的生命周期。 ### 回答3: Spring框架中的Bean生命周期源码分为以下几个步骤: 1. 加载Bean定义:Spring容器通过读取配置文件或注解等方式,将Bean的定义加载到内存中。这一步骤常用的类是BeanDefinitionReader,它会解析配置文件并创建BeanDefinition对象。 2. 创建Bean实例:Spring容器根据Bean的定义信息,使用反射机制实例化Bean对象。这一步骤通常由BeanFactory或ApplicationContext负责。 3. 设置Bean属性:容器通过Bean的Setter方法设置Bean的属性,包括依赖注入和属性值注入。 4. Aware接口回调:如果Bean实现了某些Aware接口,容器将会回调相应的方法,用于提供一些Spring框架相关的资源。 5. BeanPostProcessor前置处理:如果有注册的BeanPostProcessor对象,容器将按照顺序依次调用其postProcessBeforeInitialization方法,用于在Bean初始化之前对Bean进行处理。 6. 初始化Bean:容器调用Bean的初始化方法,可以通过@Bean注解指定,或实现InitializingBean接口。 7. BeanPostProcessor后置处理:容器将会按照顺序依次调用BeanPostProcessor的postProcessAfterInitialization方法,用于在Bean初始化之后对Bean进行处理。 8. Bean销毁前处理:如果Bean实现了DisposableBean接口或配置了destroy-method方法,容器将调用其相关方法进行销毁前的处理。 9. 销毁Bean:容器销毁Bean,可以通过@PreDestroy注解指定,或实现DisposableBean接口。 以上是Spring框架中Bean生命周期的详细源码过程。通过这些步骤,Spring容器可以完美地管理Bean的生命周期,提供各种功能和扩展点,使得开发者更加方便地使用和管理Bean。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值