我有TennisCoach课程:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class TennisCoach implements Coach {
@Autowired
@Qualifier("randomFortuneService")
private FortuneService fortuneService;
public TennisCoach() {
System.out.println("Inside default constructor");
}
@PostConstruct
public void doMyStartupStuff() {
System.out.println("Inside postconstructor");
}
@PreDestroy
public void doMyFinalStuff() {
System.out.println("Inside predestroyer");
}
@Override
public String getDailyFortune() {
return fortuneService.getFortune();
}
@Override
public String getDailyWorkout() {
return "Practice your backhand volley";
}
}而这样的主要班级:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationBeanScopeDemoApp {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
Coach theCoach = context.getBean("tennisCoach", Coach.class);
System.out.println(theCoach.getDailyFortune());
System.out.println(theCoach.getDailyWorkout());
context.close();
}
}预期产出如下:
内部默认构造函数 内部后构造函数 DailyFortune 练习反手截击 内部预驱逐舰
但我明白了:
内部默认构造函数 DailyFortune 练习反手截击
看起来,@PostContruct和@PreDestroy注释不能正常工作。我找不到我出问题的原因。
发布于 2019-03-07 21:11:14
如果使用java 9+,则添加依赖项javax.annotation:javax.annotation-api (或使用java 8)。
或者使用弹簧引导2,如果你使用弹簧引导1.
发布于 2019-03-07 21:17:43
缺省情况下,Spring可能不会处理JSR-250生命周期注释。检查您的applicationContext.xml是否有元素:
<beans ...
<context:annotation-config/>
....
</beans>它将Spring配置为了解@PostConstruct和@PrePersist。
有关更多信息,请参见这篇文章。
发布于 2019-03-07 21:20:17
来自Spring Core文档的1.9.8 - Using @PostConstruct and @PreDestroy段
如果
CommonAnnotationBeanPostProcessor是在SpringApplicationContext中注册的,则在生命周期中与相应的Spring生命周期接口方法相同的位置调用包含这些注释之一的方法,或者显式声明回调方法。
宣示
<context:annotation-config/>在applicationContext.xml文件中,隐式注册一个CommonAnnotationBeanPostProcessor。
否则,您需要手动注册,使用(文档)
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />https://stackoverflow.com/questions/55052677
复制相似问题