SpringBean生命周期及其扩展点

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor--->postProcessBeforeInitialization beanName: " +  beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor--->postProcessAfterInitialization beanName: " +  beanName);
        return bean;
    }
}
@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        System.out.println("BeanFactoryPostProcessor--->postProcessBeanFactory");
        System.out.println("获取到的ConfigurableListableBeanFactory:"+configurableListableBeanFactory.getClass().getName());
        BeanDefinition beandefinition = configurableListableBeanFactory.getBeanDefinition("userService");
        System.out.println(beandefinition.getBeanClassName());
        System.out.println(beandefinition.getScope());
//        userService.setScope("prototype");
//        System.out.println(userService.getScope());
    }
}
@Service
public class UserService implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean {


    @Override
    public void setBeanName(String s) {
        System.out.println("BeanNameAware--->setBeanName");
        System.out.println("获取到的BeanName:"+s);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("BeanFactoryAware--->setBeanFactory");
        System.out.println("获取到的BeanFactory:"+beanFactory.getClass().getName());
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("ApplicationContextAware--->setApplicationContext");
        System.out.println("获取到的ApplicationContext:"+applicationContext.getClass().getName());
    }

    @Override
    public void afterPropertiesSet() {
        System.out.println("InitializingBean--->afterPropertiesSet");
    }


    public void show() {
        System.out.println("show方法执行了");
    }

    @PostConstruct
    public void initMethod() {
        System.out.println("@PostConstruct--->initMethod");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("@PreDestroy--->destroy");
    }

    public UserService() {
        System.out.println("UserService类的构造方法执行了");
    }
}
@Configuration
@ComponentScan("com.liaoxiang")
public class AppConfig {

}
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = (UserService)context.getBean("userService");
        context.close();
    }
}

执行结果:
在这里插入图片描述
还有一些其他的点,多余单例的bean默认情况下是立即加载(创建对象实例),而对于多例的bean则是在用的时候才创建。如果对单例的bean使用了@Lazy注解,那么对象的创建也将延迟到使用的时候才创建。如果其他类里面使用了注解注入当前类,那么当前类在容器启动的时候会被创建。

BeanFactoryPostProcessor

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        System.out.println("BeanFactoryPostProcessor--->postProcessBeanFactory");
        System.out.println("获取到的ConfigurableListableBeanFactory:"+configurableListableBeanFactory.getClass().getName());
        BeanDefinition beandefinition = configurableListableBeanFactory.getBeanDefinition("userService");
        System.out.println(beandefinition.getBeanClassName());
        System.out.println(beandefinition.getScope());
//        userService.setScope("prototype");
//        System.out.println(userService.getScope());
    }
}

拿到BeanDefinition可以做的操作如下
在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值