【2019春招准备:20. spring相关】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33907408/article/details/84979718

1. spring如何管理bean的生命周期

1.1 控制bean是什么类型的对象是scope属性

在这里插入图片描述

【单例对象singleton(默认)】:如service和dao层的对象
在这里插入图片描述
在spring容器初始化的时候,创建单例对象
每次调用getBean的时候都是返回的同一个对象
可以定义init-method和destroy-method在生命周期初始和末尾执行,value只要和类里面的方法名相同就行了
生命周期随着spring的关闭而消亡

【多例对象prototype】:如action
spring不管他的销毁,也不会调用destory-method。
实际上是创建之后就传递给了客户端,spring失去了对他的引用。

【request】
在这里插入图片描述
每次请求都产生一个实例,创建之后spring仍然在监听

【session】
补充:session域和cookie
用户第一次访问servlet的时候,会创建一个独立的session,,生成一个sessionID,在返回的时候,保存在cookie中,下一次访问该servlet会带着这个sessionID去。
session默认存活30分钟

1.2 BeanFactory && ApplicationContext

  • BeanFactory基本类的结构体系
    1、4个获取实例的方法。getBean的重载方法。
    2、4个判断的方法。判断是否存在,是否为单例、原型,名称类型是否匹配。
    3、1个获取类型的方法、一个获取别名的方法。根据名称获取类型、根据名称获取别名。
    总结:
      这10个方法,很明显,这是一个典型的工厂模式的工厂接口。
    在这里插入图片描述

【xmlBeanFactory】
BeanFactory最常见的实现类,可以从classpath获取资源
可以用来加载xml配置文件
例如:
class Car

<bean id="car1" class="spring.ioc.demo1.Car"
        p:brand="spring注入-红旗001" 
        p:color="spring注入-紫色" 
        p:maxSpeed="520" />
public static void main(String[] args) {

     ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
      Resource res = resolver.getResource("classpath:applicationContext.xml");
      BeanFactory factory = new XmlBeanFactory(res);     
    //ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml"); 
            
       Car car = factory.getBean("car1",Car.class);
       System.out.println("car对象已经初始化完成");
       System.out.println(car.getMaxSpeed());
}
  • ApplicationContext

从BeanFactory派生过来
相对于工厂很多代码实现,applicationContext更多通过配置实现

  • 二者区别

1.BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。 相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

BeanFacotry延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用 ApplicationContext。
应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

2.BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。(Applicationcontext比 beanFactory 加入了一些更好使用的功能。而且 beanFactory 的许多功能需要通过编程实现而 Applicationcontext 可以通过配置实现。比如后处理 bean , Applicationcontext 直接配置在配置文件即可而 beanFactory 这要在代码中显示的写出来才可以被容器识别。 )

3.beanFactory主要是面对与 spring 框架的基础设施,面对 spring 自己。而 Applicationcontex 主要面对与 spring 使用的开发者。基本都会使用 Applicationcontex 并非 beanFactory 。

2.springmvc简介

【MVC】
model(模型) view(视图) controller(控制器)
model:是指现实世界抽象出来的模型,理解成对数据的封装和操作,是进行数据处理的地方(service+dao)
view: 应用和用户之间的接口(jsp)
controller: 视图和模型之间的交互。主要负责:分发用户的请求到相应的模型上面,把模型机试反映到视图上。(controller)

【优势】

  • 角色划分和清晰:
    dispatchServlet:前端控制器(一个中心)
    handlerMapping处理器映射器 handlerAdapter处理器适配器 viewResolver处理器适配器(三大组件)
    Controller页面控制器,Validation验证器,Command命令对象,FormObject表单对象
  • 直接操作pojo对象
  • 和spring无缝对接
  • 约定大于配置契约式编程
  • 基于注解的零配置支持
  • json文件简单流动
  • restful锋哥的支持

在这里插入图片描述

3.

【补充】

pageContext + request + session + servletContext

【page】:

  • 只做过在当前的jsp,在发生跳转、重定向、刷新的时候被销毁

【request】

  • 当http请求的时候生成,在处理结束的时候死亡。
  • 这个变量可以随forward(转发)调转到多个jsp中,单数如果刷新页面,就会被重新计算

【session】

  • 从打开浏览器到关闭浏览器
  • 如果想下次打开浏览器有同样的免密登录的类似效果,可以存到cookie中,并设置一个存活时间。

【application】

  • 从应用启动到应用结束
  • 如果不手动删除,可以一直使用,所有用户都能使用到。

猜你喜欢

转载自blog.csdn.net/qq_33907408/article/details/84979718
今日推荐