编写的插件需要满足第一个要求,请给出测试代码的截图和运行效果截图。
3条回答 默认 最新
- LouD_dm 2022-07-18 09:31关注
1.代码示例
@Component public class TestBean implements SmartInitializingSingleton { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void afterSingletonsInstantiated() { System.out.println(this); System.out.println("单例Bean实预例化完成之后调用接口"); this.setName("单例Bean实预例化完成之后调用接口"); } @Override public String toString() { return "TestBean{" + "name='" + name + '\'' + '}'; } } @Component public class TestBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // 在任何 bean 初始化回调 //(如 InitializingBean 的 afterPropertiesSet 或自定义 init 方法)之前将此 BeanPostProcessor 应用于给定的新 bean 实例。 // bean 将已填充属性值。返回的 bean 实例可能是原始的包装器 if(bean instanceof TestBean){ System.out.println("bean初始化前回调:" + bean); TestBean bean1 = (TestBean) bean; bean1.setName("bean初始化前回调"); return BeanPostProcessor.super.postProcessBeforeInitialization(bean1, beanName); } return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName); } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { // 在任何 bean 初始化回调(如 InitializingBean 的 afterPropertiesSet 或自定义 init 方法)之后, // 将此 BeanPostProcessor 应用于给定的新 bean 实例。 bean 将已填充属性值 if(bean instanceof TestBean){ System.out.println("bean初始化后回调:" + bean); TestBean bean1 = (TestBean) bean; bean1.setName("bean初始化后回调"); return BeanPostProcessor.super.postProcessBeforeInitialization(bean1, beanName); } return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName); } } @SpringBootTest class SpringbootTestApplicationTests { @Autowired private TestBean testBean; @Test void testBeanPostProcessorAndSmartInitializingSingleton() { System.out.println(testBean); } }
2.BeanPostProcessor有两个方法,一个在Bean初始化前回调,一个初始化后回调,但都在SmartInitializingSingleton之前执行
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用