Java Spring

基础

原文参考 Spring核心知识详细教程

层次框架图 上图中有三层

  • web层: struts充当web层,接管jsp,action,表单,主要体现出mvc的数据输入,数据的处理,数据的显示分离
  • model层: model层在概念上可以理解为包含了业务层,dao层,持久层,需要注意的是,一个项目中,不一定每一个层次都有
  • 持久层: 体现oop,主要解决关系模型和对象模型之间的阻抗

总结

  • Spring 是什么

spring是一个容器框架,它可以接管web层,业务层,dao层,持久层的各个组件,并且可以配置各种bean, 并可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以直接getBean(id),使用即可

  • IOC 是什么

ioc(inverse of control)控制反转:所谓反转就是把创建对象(bean)和维护对象(bean)的关系的权利从程序转移到spring的容器(spring-config.xml)

  • DI是什么

di(dependency injection)依赖注入:实际上di和ioc是同一个概念,spring的设计者,认为di更准确的表示spring的核心

实质上学习框架就是,最重要的就是学习各个配置

Bean的生命周期

生命周期分为以下几步:

  • 1、实例化

当我们加载sping-config.xml文件时,bean就会被实例化到内存(前提是scope=singleton)

  • 2、设置属性值

调用set方法设置属性,前提是有对应的set方法

  • 3、如果你调用BeanNameAware的set’Bean’Name()方法

这是个接口,该方法可以给出正在被调用的bean的id

  • 4、如果你调用BeanFactoryAware的setBeanFactory()方法

这也是个接口,该方法可以传递beanFactory

  • 5、如果你调用了ApplicationContextAeare的setApplicationContext()方法

同样为接口,该方法传递一个ApplicationContext

  • 6、BeanPostProcessor的预初始化方法Before

这个东西很厉害了,可以叫做后置处理器,它不是接口,具体细节,代码体现

  • 7、如果你调用了InitializingBean的afterPropertiesSet()方法

  • 8、调用自己的init方法,具体为在bean中有一个属性inin-method=”init”

  • 9、BeanPostProcessor的方法After

  • 10、使用bean,体现为调用了sayHi()方法

  • 11、容器关闭

  • 12、可以实现DisposableBean接口的destory方法

  • 13、可以在调用自己的销毁方法,类似于8

Aop 编程

  • aop术语
    • 切面: 要实现交叉功能,是系统模块化的一个切面领域,如记录日志
    • 连接点: 应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,或者要修改的字段
      • 连接点是一个静态的概念
    • 通知: 切面的实际实现,它通知系统的新行为,如日志通知包含了实现日志功能的代码,如向日志文件写日志,通知在连接点插入应用系统中。
    • 切入点:定义了通知应该应用在哪些连接点通知可以应用到AOP框架支持的任何连接点
      • 切入点是动态概念,当通知应用了连接点连接点就变成了切入点
    • 引入: 为类添加新方法和属性
    • 目标对象:通知的对象,既可以是你编写的类,也可以是第三方类
    • 代理:通知应用到目标对象后创建后的对象,应用系统的其他部分不用为了支持代理对象而改变
      • spring 的两种代理
        • 目标对象实现了若干个接口,spring使用JDK的java.lang.reflect.Proxy类代理
        • 目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类
    • 织入:切面应用到目标对象从而创建一个新代理对象的过程,织入发生在目标对象生命周期的多个点上
      • 编译期: 切面在目标对象编译时织入,这需要一个特使的编译器
      • 类装载期: 切面在目标对象被载入jvm时织入,这需要一个特殊的类加载器
      • 运行期: 切面在应用系统运行时切入