spring 工作原理

来源:互联网 发布:淘宝能卖二手货吗 编辑:程序博客网 时间:2024/06/12 20:20

1、spring 工作原理

核心1:IOC

内部最核心的就是IOC了,动态注入,让一个对象的创建不用new,而是自动产生,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。

核心 2 : AOP

面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。

Spring 的目的

就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

Spring AOP与IOC

1、IoC(Inversion of control): 控制反转
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean

2、AOP(Aspect-Oriented Programming): 面向方面编程
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
静态代理:

  • 针对每个具体类分别编写代理类;
  • 针对一个接口编写一个代理类;

2、动态代理

不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的Method,调用装备的invoke方法,将动态代理、 Method、方法参数传与装备的invoke方法,invoke方法在唤起method方法前或后做一些处理。

  • 产生动态代理的类:java.lang.refect.Proxy
  • 装备必须实现InvocationHandler接口实现invoke方法

3、反射

概念: 通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。
得到方法:

  • Class cls=类.class;

  • Class cls=对象.getClass();

  • Class.forName(“类路径”);

4、spring的三种注入方式

  • Setter 注入:
    • 对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。
    • 如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。
    • 如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。
  • 构造器注入:
    • 在构造期间完成一个完整的、合法的对象。
      所有依赖关系在构造函数中集中呈现。
    • 依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。
    • 只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。
  • 接口注入(不推荐):
    • 接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限。

5、Spring框架的7个模块

这里写图片描述

  • Spring Core:核心容器,BeanFactory(控制反转)提供了组件声明周期管理,组件的穿件,封装,销毁等功能。
  • SpringContext:ApplicationContext,扩展核心容器,提供事件处理,国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。
  • Spring AOP:提供切面支持。
  • SpringDAO:提供事务支持,JDBC,DAO支持。
  • Spring ORM:对流行的O/RMapping封装或支持。
  • Spring Web:提供Web应用上下文,对Web开发提供上的支持,如请求,表单,异常等。
  • Spring Web MVC:全功能MVC框架,作用等同于Struts。