我可以用这行代码获得bean定义:
BeanDefinitionRegistry bdr = (BeanDefinitionRegistry) context.getAutowireCapableBeanFactory();
bdr.getBeanDefinition("myBean")
当我使用 @PostConstruct 或 InitializingBean.afterPropertiesSet 时,Generic bean:class [com.kciray.play.MyBean];范围=单; 抽象= FALSE; lazyInit = FALSE; autowireMode = 0; dependencyCheck = 0; autowireCandidate = TRUE;初级= FALSE; factoryBeanName = NULL; factoryMethodName = NULL; initMethodName = null; destroyMethodName = null
initMethodName 为null。因此,这些不是XML配置的确切替代方法(init-method =“some”)。
我想知道这个微小不一致背后的 原因 。为了学习起见,在Java中设置init-method的方法。
答案 0 :(得分:1)
为什么要设置init方法的名称?这似乎是不切实际的,因为它是在幕后完成的。但是,您可以同时使用多种init方法,并且在official documentation中有一个定义的顺序。
在XML配置中,您可以设置init方法,因此Spring容器会在定义的beans
或特定的bean
标记中查找此类方法,但这会不必要地将代码与框架耦合并使其成为可读性稍差。 显式优于隐式。
JSR-250 @PostConstruct和@PreDestroy注释通常被认为是在现代Spring应用程序中接收生命周期回调的最佳实践。使用这些注释意味着您的bean不会耦合到Spring特定的接口。有关详细信息,请参阅Section 7.9.8, “@PostConstruct and @PreDestroy“。