zoukankan      html  css  js  c++  java
  • context容器上下文件

    在web项目中想要获取哪个bean,得先得到容器上下文context

     1 public class MyLoaderListener extends ContextLoader implements ServletContextListener {
     2     private static final Logger logger = LoggerFactory.getLogger(MyLoaderListener.class);
     3 
     4     @Override
     5     public void contextInitialized(ServletContextEvent servletContextEvent) { 
    7
    ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContextEvent.getServletContext()); 8 MyBeanFactory.setContext(context); 15 } 16 17 @Override 18 public void contextDestroyed(ServletContextEvent servletContextEvent) { 20 } 21 }
    ContextLoader 类能获取WebApplicationContext
    ServletContextListener 接口的
    public void contextInitialized(ServletContextEvent servletContextEvent) 方法初始化
    public void contextDestroyed(ServletContextEvent servletContextEvent) 方法销毁

    MyLoaderListener 类将ApplicationContext 塞比例MyBeanFactory类
     1 public final class MyBeanFactory {
     2 
     3     private static ApplicationContext context;
     4 
     5     public static void setContext(ApplicationContext context) {
     6         MyBeanFactory.context = context;
     7     }
     8 
     9     public static Object getBean(String beanName) {
    10         return context.getBean(beanName);
    11     }
    12 }
    MyBeanFactory 类的静态方法,可以随时获取任务bean


     ServletContext 被 Servlet 程序用来与 Web 容器通信。每一个 Web 应用程序含有一个Context ,被Web 应用内的各个程序共享。

    因为Context 可以用来保存资源并且共享,所以我所知道的ServletContext 的最大应用是Web 缓存---- 把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O 了。

       ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。

           在JSP 文件中,application 是 ServletContext 的实例,由JSP 容器默认创建。Servlet 中调用getServletContext() 方法得到 ServletContext 的实例。

    我们使用缓存的方法:

           1. 服务器启动时,ServletContextListener 的 contextInitialized() 方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 servletContext.setAttribute() 方法将缓存类保存在ServletContext 的实例中。

           2. 程序使用 ServletContext.getAttribute() 读取缓存。如果是 JSP ,使用application.getAttribute() 。如果是Servlet ,使用 getServletContext().getAttribute() 。如果缓存发生变化( 如访问计数) ,你可以同时更改缓存和文件/ 数据库。或者你等变化积累到一定程序再保存,也可以在下一步保存。

           3. 服务器将要关闭时,ServletContextListener 的 contextDestroyed() 方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。

  • 相关阅读:
    ncnn 编译配置
    Android 配置 ncnn
    Android Studio 配置 OpenCV4+
    ROS catkin cheat sheet
    CMake 使用代理服务器
    Git设置代理服务器
    安卓assets处理
    【Android】Toast on non-UI thread
    高级语言编译和运行系统
    linux环境安装包方式
  • 原文地址:https://www.cnblogs.com/ngy0217/p/9016217.html
Copyright © 2011-2022 走看看