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

51 篇文章 0 订阅

【内容】
1.spring对bean生命周期的管理
2.springmvc相关事项
3.springIOC和aop实现原理

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. spring IOC AOP

3.1 ioc控制反转

inversion of control·
程序创建对象变成了,spring容器创建,并有spring容器进行对象属性的设置
IOC也叫做依赖注入(depenedncy injection) 必须通过setter方法进行注入(如果bean或者pojo中没有set方法 就不可以注入,xml配置文件报错)

注入有四种:
构造器注入(ioc创建对象)
setter注入(重点)set+属性名首字母大写
和(批注入,名称空间注入)

3.2 aop面向切面编程(Aspect Orient Programming)

将影响了多各类的公共行为封装到一个可重用模块中,成为aspect,减少重复代码(静态代理每一个service就有对应的serviceProxy相当繁琐)。
实现aop的技术支持:
1.基于接口的动态代理:jdk动态代理技术
proxy类和InvocationHandler接口
2.基于类的动态代理:Cglib

javassist是一个开源的分析,编辑和创建java字节码的类库

【补充】

pageContext + request + session + servletContext

【page】:

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

【request】

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

【session】

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

【application】

  • 从应用启动到应用结束
  • 如果不手动删除,可以一直使用,所有用户都能使用到。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值