随web容器启动Java类,调用spring容器中的的bean及其方法

之前讲过,要将一个Java类随web容器的启动而启动,需要如下几个步骤:


1:首先让你要自动运行的类继承

javax.servlet.http.HttpServlet

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");
 }

}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。