我正在开发一个web应用程序,并且我是Spring Hibernate的新手。在那里,我有一个定期运行方法的ServletContextListener。在那个类中,我调用了ReceiptDao类中的一个方法。
下面是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非托管类调用了这个方法。但是我不知道如何将我的Spring托管ReceiptDao注入到我的ServletContextListener中。
你能告诉我怎么注射吗?请注意我必须在我的web.xml和spring-config-file.xml中做的更改。
发布于 2013-11-28 19:09:05
要创建一个新类并注入其他类,您需要创建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;
}你可以自由地使用它
https://stackoverflow.com/questions/20264287
复制相似问题