今天写项目遇到了一个问题:想在spring中注入静态变量。通过Spring注入后发现报如下错误:
@Resource annotation is not supported on static fields
上网搜寻发现,Spring注解注入不支持静态变量注入,遂想办法解决。
首先看到的方法是有一个
- <bean id=”userService”
- class=”bookstore.service.UserService”
- init-method=”init” destroy-method=”destroy”>
- …
- </bean>
这样的方法,通过编写一个方法init(),然后通过xml配置 init-method=”init” ,在init方法中从取值赋成静态的,但是我不想写xml,毕竟项目里主要用的都是annotation方式,于是发现如下两个注解:
@PostConstruct 和 @PreDestroy
一个是在初始化之后调用,一个是在摧毁之前调用。这样就可以使用的。
我在junit下做了测试,就不发项目代码了,代码如下:
- private static IManageResService service;
static{
TimerTask task = new TimerTask() {
@Override
public void run() {
log.info("定时统计机构和用户排行榜开始");
service.statistics();
}
};
Timer timer = new Timer();
long delay = 60 * 1000;//1分钟
long intevalPeriod = 60 * 60 * 1000;//1小时
// schedules the task to be run in an interval
timer.scheduleAtFixedRate(task, delay, intevalPeriod);
}
@PostConstruct
public void init() {
service = this;
}