打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java Web 启动时自动执行代码的几种方式

 Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置处理器开始执行,然后是Servlet的监听器执行,再接下来是Servlet的过滤器执行,最后才是Servlet执行。

1.实现Servlet监听器接口ServletContextListener

public class InitListener implements ServletContextListener {        @Override      public void contextDestroyed(ServletContextEvent context) {                }        @Override      public void contextInitialized(ServletContextEvent context) {          // 上下文初始化执行          System.out.println("================>[ServletContextListener]自动加载启动开始.");         SpringUtil.getInstance().setContext(WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext()));      }  }

然后在web.xml文件配置该监听器

<listener>      <listener-class>com.test.init.InitListener</listener-class>  </listener>  

 

2.实现Servlet的过滤器Filter

public class InitFilter implements Filter {        @Override      public void destroy() {        }        @Override      public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,              ServletException {        }        @Override      public void init(FilterConfig config) throws ServletException {          System.out.println("================>[Filter]自动加载启动开始.");          // 读取Spring容器中的Bean[此时Bean已加载,可以使用]          //写启动需要执行的代码          System.out.println("================>[Filter]自动加载启动结束.");      }  }  

然后在web.xml文件配置过滤器即可

<filter>      <filter-name>InitFilter</filter-name>      <filter-class>com.test.init.InitFilter</filter-class>  </filter>  <filter-mapping>      <filter-name>InitFilter</filter-name>      <url-pattern>/</url-pattern>  </filter-mapping>

 

3.编写一个Servlet,在web.xml里面配置容器启动后执行即可

public class InitServlet extends HttpServlet {        /**       */      private static final long serialVersionUID = 1L;        @Override      public void init(ServletConfig config) {          try {              super.init();          } catch (ServletException e) {              e.printStackTrace();          }          System.out.println("================>[Servlet]自动加载启动开始.");          // 读取Spring容器中的Bean[此时Bean已加载,可以使用]          //执行想要的代码          System.out.println("================>[Servlet]自动加载启动结束.");      }  }

然后在web.xml文件配置该Servlet的启动方式为:容器启动后执行 

<servlet>      <servlet-name>InitServlet</servlet-name>      <servlet-class>com.test.init.InitServlet</servlet-class>      <init-param>          <param-name>username</param-name>          <param-value>test</param-value>      </init-param>              <!-- 此处指定加载顺序为2,表明还有优先级更高的Servlet要先执行 -->      <load-on-startup>2</load-on-startup>  </servlet>  <servlet-mapping>      <servlet-name>InitServlet</servlet-name>      <url-pattern>/</url-pattern>  </servlet-mapping>  

关于启动后执行,由load-on-startup指定: 

(1)当值为0或者大于0时,表示容器在应用启动时就加载这个servlet。值越小,启动优先级越高; 
(2)当是一个负数时或者没有指定时,表示该servlet被调用时才加载。 

 

4.如果你使用Spring IOC作为Bean管理容器,那么可以指定init-method其中init-method表示bean加载成功后,立即执行某个方法

配置如下:start为要执行的方法名称

<!-- service -->  <bean id="shopService" class="com.test.teach.service.ShopService" init-method="start">      <property name="shopDao" ref="shopDao" />  </bean>  

 

5.如果你使用Spring IOC作为Bean管理容器,还可以实现Spring的Bean后置处理器接口
        BeanFactoryPostProcessor表示:该Bean加载完成之后,Spring可以让开发者自定义一些事件。

public class KeyWordInit implements BeanFactoryPostProcessor {        @Override      public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {          System.out.println("================>[BeanFactoryPostProcessor]自动加载启动开始.");          ShopService shopService = factory.getBean("shopService", ShopService.class);          List<Map<String, Object>> shopList = shopService.findAllShop();          System.out.println("================>" + shopList);          System.out.println("================>[BeanFactoryPostProcessor]自动加载启动结束.");      }}

 



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Servlet中的过滤器Filter详解
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
JA-SIG(CAS)学习笔记
在servlet、filter、Taglib中获取Spring Bean
Filter的执行顺序与实例
spring boot web相关配置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服