2013-11-28 202 views
0

我正在開發一個Web應用程序,我是Spring Hibernate的新手。在那裏我有一個ServletContextListener來定期運行一個方法。在那個類中,我在ReceiptDao類中調用了一個方法。向ServletContextListener注入依賴關係

下面的ServletContextListener類

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方法

@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託管ReceiptDao注入到我的ServletContextListener中。

請問您可以告訴我如何注入它。請在我的web.xml和spring-config-file.xml中提及我必須做的更改。

+0

在春季安排豆子?將只是3行XML ... –

+0

哦,是的,這很容易。我安排了一個春天的豆子,做了我想要的東西。謝謝。 – Neha

回答

0

要創建一個新類並注入其他類,您需要創建bean。

在你的情況下注入您的receiptDAO;你需要爲以下幾點:

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

在你的類只創建:

private ReceiptDao receiptDAO; 
public getReceiptDAO() 
{ 
    return receiptDAO; 
} 

,爲什麼你需要的`ServletContextListener` ......爲什麼不乾脆你可以自由地使用它

+0

我試過了。但是它在行 receiptDAO.listReceipts();返回NullPointerException 感謝您的回覆,併爲延遲感到抱歉。 – Neha