在ServletContextListener 的实现类中 使用Spring @Value 注解的方式读取配置文件
我想向ServletContextListener中通过Spring @value 的方法读取 properties 配置文件信息,但是我开始的方法不行
public class MyListener implements ServletContextListener{
@Value("${username}")
private String username;
@Value("${password}")
private String password;
/* (non-Javadoc)
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
*/
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("Initialising listener...");
System.out.println("username:" + username + "password:" + password);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
}
}
web.xml:
MyListener
SpringConfig.xml:
classpath:my.properties
my.properties
username=zjl
password=123
输出:
Initialising listener...
username:null password: null
实现这一点的正确方法是什么?
在应用出加入
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
如下:
public class MyListener implements ServletContextListener{
@Value("${username}")
private String username;
@Value("${password}")
private String password;
/* (non-Javadoc)
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
*/
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("Initialising listener...");
// 加入下面的这行代码
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
System.out.println("username:" + username + "password:" + password);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
}
}
在ServletContextListener 的实现类中注入Spring bean 也是同样的操作
public class MyServletListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener {
@Autowired
private SomeService someService;
@Autowired
private AnotherService anotherService;
public void contextInitialized(ServletContextEvent sce) {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
...
}