T1:Spring中Bean的生命周期
total:
1.先要通过反射调用bean的构造器实例化bean;
2.再通过反射注入bean的属性;
3.若实现里BeanNameAware接口,根据Bean的id,setBeanName();
4.若实现了BeanFactoryAware接口,调用setBeanFactory(),传入一个BeanFactory实例进来;
5.若实现了ApllicationContextAware接口,调用setApllicationContext(),将应用上下文的引用传入;
6.若实现了BeanPostProcessor接口,调用postProcessBeforeInitialization方法做前置处理;
7.若实现了InitializingBean接口,调用afterPropertiesSet方法;
8.若实现了BeanPostProcessor接口,调用postProcessAfterInitialization方法做后置处理;
9.bean将一直在上下文中,被调用,直到ApplicationContext被销毁;
10.destroy()。
当bean作用域为单例模式:可以正常destroy;因为每次请求,都会得到相同的bean,在创建实例后,容器会一直跟踪bean的状态。
当bean作用域为prototype:无法destroy,因为每次请求bean都是创建的不同的bean,所以创建后将不会跟踪bean,需要客户端处理,所以原型模式开销大,尽量避免使用。
T2:Bean的作用域
除了单例,prototype,还有request,session, globalsession
T3:Spring中过滤器和拦截器的区别
1.过滤器只在Servlet前后起作用,而拦截器能够深入到方法前后、异常跑出前后等,拦截器的使用有更大的弹性;所以过滤器一般用来处理请求的编码格式,URL鉴权,session,日志等,拦截器处理业务逻辑,如用户登录;
2.过滤器是servlet规范里定的,拦截器是Spring面向切面变成的一种实现。
3.使用的资源不同。同其他代码块一样,拦截器也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象(各种bean),而Filter不行。
T4:Spring Intercepter:
拦截器是在请求到servlet之后执行,在Spring中,处理器拦截器HandlerIntercepter是链式调用的,每个拦截器内都有三个方法:
1.preHandle(); 2.postHandle(); 3.afterCompletion();preHandle是前置处理,返回boolean类型,如果是false表示请求结束,即后续的拦截器和controller都不会执行了,如果是true就会调用后续拦截器的preHandle方法,直到执行controller;
postHandle是在controller执行结束后执行,但是执行的顺序是反链式的,preHandle是从头到尾执行,postHandle是从尾到头执行。
afterCompletion是在所有请求结束后执行,主要用于清理工作。
T5:Spring Filter:
过滤器是在请求到servlet之前做的处理,同样也是链式调用。Filter也有三个方法:1.init();2.doFilter(); 3.destroy();init方法在filter初始化之后调用,destroy在filter销毁之前调用,doFilter过滤请求的request和返回的response,可以在doFilter中利用FilterChain调用下一个Filter的doFilter。
T6:Spring Bean的属性
id: 该bean的唯一标识符,整个xml文件
name : 为bean的id创建的别名
class : 定义类的全限定名
?parent :parent虽然是继承关系,子类继承父类的属性,但是子类和父类其实是一个类,因为父类一般是abstract,不会有class属性
abstract:定义这个bean是抽象的bean不会被实例化
singleton:true:BeanFactory只维护这一个实例;false:就是prototype,每次创建新的实例
lazy-init:true:在BeanFactory启动时初始化所有的SingletonBean;false:Bean请求时开始初始化SingletonBean
autowire:定义bean的自动装载方式
dependency-check:检查bean的依赖关系是否得到满足
depends-on:该bean对其他bean的依赖关系,Value是其他bean的id
init-method: 初始化方法,在bean组装完之后调用
destroy-method:因为只有singleton下的bean才会被容器全程管理,所以销毁方法只适用于singleton
factory-method:定义创建该Bean对象的工厂方法
factory-bean:定义创建该Bean对象的工厂类
T7:bean之间的关系
继承和依赖:
继承一般父类有abstract属性,无class属性,子类通过parent属性关联父类
依赖通过depends-on属性,与依赖bean的id关联。