什么是Spring?
Spring是一个轻量级的IOC和AOP容器框架,是用来解决企业级应用程序开发中业务逻辑层和其他各层之间的耦合问题。
Spring主要有6个模块:核心容器(Core Container)、AOP和设备支持、数据访问与集成、Web与远程调用、发送报文(Messaging)、测试Test。
其中核心容器内的spring-core 和 spring-beans 模块是 Spring 框架的核心模块,包含了控制反转(Inversion ofControl, IOC)和依赖注入(Dependency Injection, DI)
IOC就是控制反转,指将创建对象的控制权转移给Spring容器,由Spring的xml配置文件来创建各个实例和管理实例之间的依赖关系,松散耦合。
DI就是依赖注入,主要有三种注入方式:
- setter方法注入,在POJO类中为它的属性创建setter方法,然后在xml文件的bean中property赋值value。
- 有参构造注入,在POJO类中创建一个有参构造方法,然后在xml文件的bean中constructor-arg赋值value
- 接口注入,最不常用,不太知道。
AOP就是面向切面编程,通过预编译方式和运行期动态代理实现程序的统一维护的一种技术。就是将那些与业务无关,但会对多个对象造成影响的公共逻辑和行为抽取并封装成一个可重用的模块。
AOP的基本概念:
AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring的AOP代理可以是JDK动态代理,也可以说是CGLIB代理,前者基于接口,后者基于子类。因为现在的项目都是面向接口编程,所以JDK动态代理用的更多一些。
- Aspect(切面):通常是一个类,里面可以定义切入点和通知
- JointPoint(连接点):类中可以被增强的方法
- pointCut(切入点):实际被增强的方法
- Advice(通知/增强):方法被增强的内容,一般有前置、后置、异常、最终、环绕通知
- Target(目标对象):动态代理的目标对象
- Weaving(织入):把增强用到目标对象上的过程(Advice——>Weaving)
- Proxy(代理):一个类被织入增强后,产生代理类