我有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批注似乎无法正常工作。我找不到问题的原因。
答案 0 :(得分:1)
如果您使用Java 9+,则添加依赖项 for(i in 1:8){
x=0
for(j in 1:8){
if(df[i,1]==df[j,1]){x=x+df[j,2]}}
df[i,3]=x
}
df[,2]=df[,3]
(或使用Java 8)。
或者如果使用spring-boot 1,则使用spring-boot 2。
答案 1 :(得分:1)
默认情况下,Spring可能不处理JSR-250生命周期注释。检查您的 applicationContext.xml 是否具有元素:
<beans ...
<context:annotation-config/>
....
</beans>
将Spring配置为了解@PostConstruct
和@PrePersist
。
更多信息,请参见this article。
答案 2 :(得分:1)
在Spring Core
文档中,第1.9.8 - Using @PostConstruct and @PreDestroy
段
提供
CommonAnnotationBeanPostProcessor
已注册 在SpringApplicationContext
中,一种承载以下方法之一的方法 注释在生命周期中与 相应的Spring生命周期接口方法或显式声明 回调方法。
声明
<context:annotation-config/>
在applicationContext.xml
文件中,隐式注册一个CommonAnnotationBeanPostProcessor
。
否则,您需要使用(docs)手动注册
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
答案 3 :(得分:0)
您的Spring不知道注释的@PostContruct和@PreDestroy。 将此代码添加到您的applicationContext.xml
<bean class = "org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
或在TenisCoach类中实现InitializingBean,DisposableBean接口。
答案 4 :(得分:0)
Eclipse无法导入@PostConstruct或@PreDestroy
发生这种情况是因为Java 9和更高版本。
使用Java 9和更高版本时,javax.annotation已从其默认类路径中删除。 解决方案
使用以下步骤将其添加到Java构建路径中。
右键单击您的项目,选择“属性”
在左侧,单击Java Build Path
在对话框的顶部中心,单击“库”
单击“类路径”,然后单击“添加JAR ...”。
导航到JAR文件/lib/javax.annotation-api-1.3.2.jar
单击“确定”,然后单击“应用并关闭”
Eclipse将对您的项目进行重建,并将解决相关的构建错误。