概念

Spring 的核心是轻量级的容器,它实现了 IoC 容器、非侵入性的框架

Spring提供 AOP 概念的实现方式,提供对持久层、事务的支持,提供对MVC Web框架的实现

【Spring】框架

IoC

组件之间的依赖关系由容器在运行时决定

控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。

  • IoC要求:容器尽量不要侵入到应用程序中去,应用程序本身可以依赖于抽象的接口,容器根据这些接口所需要的资源注入到应用程序中

  • IoC注入方式:基于Setter方式、基于构造方法、基于接口

  • IoC核心:Bean工厂,负责创建、依赖注入、生命周期

  • IoC容器:beans包、context包

两种注入方式的区别

  • Constructor: 可以在构建对象的同时,把依赖关系也构建好。对象创建后好就已经准备好了所有的资源,安全性高。
  • Setter: 创建完对象之后再通过 set()方法进行属性的设定。

单例 bean:默认情况下,从 bean 工厂所取得的实例为 Singleton

ApplicationContext的功能扩展

  • BeanPostProcessor:依赖注入之后的后续操作
  • BeanFactoryPostProcessor:对 Bean 工厂修改其它支持
  • messageSource:国际化消息的支持
  • 事件的支持:可发布的事件(ApplicationEvent)、发布事件的方法(publishEvent)、事件监听接口(ApplicationListener)

 

AOP

代理方式:

  • 静态代理:针对每个具体类分别编写代理类;针对一个接口编写一个代理类;
  • 动态代理:针对一个方面编写一个 InvocationHandler,然后借用 JDK 反射包中的 Proxy 类为各种接口动态生成相应的代理类

Spring生成代理对象方式: JDKProxy 和 Cglib

  • 具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的配置来决定
  • 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
  • 如果目标对象实现了接口,可以强制使用CGLIB实现AOP
  • 如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

强制使用CGLIB实现AOP

  • 添加CGLIB库,SPRING_HOME/cglib/*.jar
  • 在spring配置文件中加入< aop:aspectj-autoproxy proxy-target-class=”true”/>

JDK动态代理和CGLIB字节码生成的区别

  • JDK代理是不需要依赖第三方的库,只要JDK环境就可以进行代理
  • JDK动态代理只能对实现了接口的类生成代理,而不能针对类
  • CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
    因为是继承,所以该类或方法最好不要声明成final

JDK代理实现要求

  • 实现InvocationHandler
  • 使用Proxy.newProxyInstance产生代理对象
  • 被代理的对象必须要实现接口

CGLIB实现要求

  • 必须依赖于CGLib的类库
  • 目标类和方法不能声明为final类型

针对接口编程的环境下推荐使用JDK的代理
从执行效率上看,Cglib动态代理效率较高

 


 

Spring 核心容器

核心容器提供 Spring 框架的基本功能,管理着Spring应用中bean的创建和配置。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用 DI 将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring 上下文

Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息,提供了一种框架式的对象访问方法,有些像JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。Spring 上下文和Bean工厂都是 bean 容器 的实现。

Spring AOP

通过配置管理特性,Spring AOP 模块直接将向切面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。

Spring DAO

JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM

Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web 模块

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。

Spring MVC 框架

MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

 

小结

Spring 是一个从实际项目开发经验中抽取的, 可高度重用的应用

其核心是IoC和AOP,同时Spring也是模块化的,通过七大模块可以很好的构建相应的程序

 
 

参考:
https://blog.csdn.net/tanga842428/article/details/52716875
https://blog.csdn.net/u011277123/article/details/78392875

相关文章:

  • 2021-08-21
猜你喜欢
  • 2021-10-07
  • 2022-12-23
  • 2021-04-22
  • 2021-05-02
  • 2021-06-01
相关资源
相似解决方案