首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向ServletContextListener注入依赖项

向ServletContextListener注入依赖项
EN

Stack Overflow用户
提问于 2013-11-28 19:00:34
回答 1查看 719关注 0票数 0

我正在开发一个web应用程序,并且我是Spring Hibernate的新手。在那里,我有一个定期运行方法的ServletContextListener。在那个类中,我调用了ReceiptDao类中的一个方法。

下面是ServletContextListener类

代码语言:javascript
运行
复制
public class MailReminder implements ServletContextListener {

    public void contextInitialized(ServletContextEvent arg0) {
    ServletContext servletContext = arg0.getServletContext();
    System.out.println("ServletContextListener started");

    int delay = 1000;
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask(){
    public void run(){

        ReceiptDao receiptDao=new ReceiptDao();
        receiptDao.listReceipts();
        }
    },delay, 1000*60);
    }


    public void contextDestroyed(ServletContextEvent arg0) {

    ServletContext servletContext = arg0.getServletContext();
    Timer timer = (Timer)servletContext.getAttribute ("timer");
    if (timer != null)
    timer.cancel();
    servletContext.removeAttribute ("timer");
    System.out.println("ServletContextListener destroyed");
    }
    }

下面是ReceiptDao中的方法

代码语言:javascript
运行
复制
 @Autowired
 private SessionFactory sessionFactory;

 @SuppressWarnings("unchecked")
 public List<Receipt> listReceipts() {

    Session session = sessionFactory.openSession();  //line 150
    Criteria crit= session.createCriteria(Receipt.class);
    crit.add(Restrictions.eq("ReceiptId",2 ));
    List<Receipt> receiptlist= crit.list();
    session.close();
    return receiptlist;

    }

它在第150行给出了一个NullPointerException。我知道会发生这种情况,因为我通过Spring非托管类调用了这个方法。但是我不知道如何将我的Spring托管ReceiptDao注入到我的ServletContextListener中。

你能告诉我怎么注射吗?请注意我必须在我的web.xml和spring-config-file.xml中做的更改。

EN

回答 1

Stack Overflow用户

发布于 2013-11-28 19:09:05

要创建一个新类并注入其他类,您需要创建bean。

在注入receiptDAO的情况下,您需要执行以下操作:

代码语言:javascript
运行
复制
 <beans>
     <bean id="receiptDAO" class="{path}.ReceiptDao" singleton="true"/>

     <bean id="mailReminder" class="{path}.MailReminder" scope="singleton">
       <property name="receiptDAO">
         <ref bean="receiptDAO"/>
      </property>         
    </bean>
  </beans>

在你的类中只需创建:

代码语言:javascript
运行
复制
private ReceiptDao receiptDAO;
public getReceiptDAO()
{
  return receiptDAO;
}

你可以自由地使用它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20264287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档