我想向ServletContextListener中经过Spring @value 的方法读取 properties 配置文件信息,可是我开始的方法不行html
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:java
<listener> <listener-class>MyListener</listener-class> </listener>
SpringConfig.xml:web
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreUnresolvablePlaceholders" value="true"/> <property name="locations"> <list> <value>classpath:my.properties</value> </list> </property> </bean>
my.propertiesspring
username=zjl password=123
输出:ide
Initialising listener... username:null password: null
实现这一点的正确方法是什么?this
参考stackoverflowspa
在应用出加入 .net
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
以下:code
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 也是一样的操做xml
public class MyServletListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener { @Autowired private SomeService someService; @Autowired private AnotherService anotherService; public void contextInitialized(ServletContextEvent sce) { SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); } ... }
参考来自:https://codeday.me/bug/20180205/128995.html
https://stackoverflow.com/questions/5511152/dependency-inject-servlet-listener