init-method的完全替代方法(基于Java)

时间:2017-08-26 10:47:08

标签: java spring javabeans

我可以用这行代码获得bean定义:

BeanDefinitionRegistry bdr = (BeanDefinitionRegistry) context.getAutowireCapableBeanFactory();
bdr.getBeanDefinition("myBean")
  

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

当我使用 @PostConstruct InitializingBean.afterPropertiesSet 时,

initMethodName 为null。因此,这些不是XML配置的确切替代方法(init-method =“some”)。

我想知道这个微小不一致背后的 原因 。为了学习起见,在Java中设置init-method的方法。

1 个答案:

答案 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“。