随web容器启动Java类,调用spring容器中的的bean及其方法
之前讲过,要将一个Java类随web容器的启动而启动,需要如下几个步骤:
1:首先让你要自动运行的类继承
2:把你要自动运行的类中写一个init方法。(servlet应用程序启动的入口就是init方法)
public static void init(){
System.out.println("这样在web容器启动的时候,就会执行这句话了!");
}
3:在web.xml中新建一个servlet,如下:
<servlet>
<servlet-name>GenerateData</servlet-name>
<servlet-class>com.yq.javaSCADA.business.impl.GenerateData</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
4:启动的web服务器,tomcat,weblogic,jboss,就会自动运行你类中的init方法了。
现在新增一些要求,我的整个项目的框架是在spring框架下的,我在这个自动运行的类中的main方法中,主要是产生一些数据,然后将这些数据自动的插入到数据库中,插入数据的时候,需要调用spring容器中的dao相关的bean进行数据库的操作。
如果我们直接在这个自动启动的类中,增加dao的属性,在spring配置文件中配置这个自动启动的类,并希望它能成功使用spring容器中的bean,那么结果只会让我们失望,因为spring容器相关的context(上下文并没有引入到这个自动类来),当然,我们可以按照Java应用程序启动spring容器的方法,在自动启动类里面再启动一次spring,操作如下:
ClassPathXmlApplicationContext contex=new ClassPathXmlApplicationContext(“com/conf/*.xml”);
然后从context里面取出我们需要的bean。
其实spring也给我们提供了另外两种方法!
方法一:
只需要让这个随web容器启动的类实现org.springframework.beans.factory.BeanFactoryAware接口,具体例子如下:
public class GenerateData extends HttpServlet implements BeanFactoryAware{
private static BeanFactory beanFactory ;
@Override
public void setBeanFactory(BeanFactory beanfactory) throws BeansException {
this.beanFactory=beanfactory;
}
//这里的insertDataDao,就是spring管理的bean,我们只需取出来用就可以,不用做第二次启动spring容器
InsertDataDao insertDataDao=beanFactory.getbean("insertDataDao");
User user=new User("username",“age”,"sex");
insertDataDao.insert(user);
}
方法二:
spring本身还提供了不是用继承HttpServlet的初始化一个类的方式:
让该类实现org.springframework.beans.factory.InitializingBean;
和org.springframework.web.context.ServletContextAware;两个接口就可以了。然后将需要随web容器启动的代码写到ServletContextAware接口提供的setServletContext方法即可,例子如下:
import javax.servlet.ServletContext;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.web.context.ServletContextAware;
public class SpringInitMethodTest implements InitializingBean,ServletContextAware{
@Override
public void afterPropertiesSet() throws Exception {
}
@Override
public void setServletContext(ServletContext arg0) {
System.out.println("spring初始化方法成功,oh,yeah");
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。