在ServletContextListener 的实现类中(使用Spring @Value 注解的方式读取配置文件、或者注入Spring bean)...

在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:

<listener>
  <listener-class>MyListener</listener-class>
</listener> 

SpringConfig.xml:

<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.properties

username=zjl
password=123

输出:

Initialising listener...
username:null password: null

实现这一点的正确方法是什么?

 

参考stackoverflow

 在应用出加入  

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 也是同样的操作

Spring – 将依赖项注入到ServletContextListener中
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

转载于:https://my.oschina.net/zjllovecode/blog/2978849

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值