Spring框架宗旨:不重新发明技术,让原有的技术使用起来更加方便
Spring三大核心功能
1.IoC/DI 控制反转 依赖注入
Ioc完成的事情原先由程序员主动通过new实例化对象事情,转交给Spring负责
控制:控制类的对象
反转:转交给Spring负责
最大作用解耦:程序员不需要管理对象,解除了对象管理和程序员之间的耦合
-
AOP 面向切面编程
在原有纵向执行流程中添加横切面,不需要修改原有代码,具有高扩展性,原有功能相当于释放了部分逻辑,让职责更加明确
常用概念
- 原有功能:切点, pointcut
- 前置通知:在切点之前执行的功能.before advice
- 后置通知:在切点之后执行的功能,after advice
- 如果切点执行过程中出现异常,会触发异常通知,throws adivce
- 所有功能总称为叫做切面.
- 织入:吧切面嵌入到原有功能的过程叫做织入
Spring提供了2种 AOP 实现方式
2.1 Schema-based
1)每个通知都需要实现接口或类
2)配置spring配置文件在<aop:config>配置
2.1.2 具体实现步骤
1.1)前置通知类配置 导入多需要的jar包或依赖(aopalliance.jar和aspectjweaver.jar)
1.2)新建前置通知类 并且继承 MethBeforeAdvice
public class MyBeforeAdvice implements MethodBeforeAdvice{
@Override
public void before(Method arg0,Object[] arg1,Object arg2) throws Throwable{
System.out.println("执行前置通知");
}
}
2.1 新建后置通知 实现 AfterReturningAdvice接口
(arg0:切点对象返回值,arg1:切点方法对象,arg2:切点方法参数,arg3:切点方法所在类对象)
public class MyAfterAdvice implements AfterReturningAdvice{
@Override
public void before(Object arg0, Method arg1,Object[] arg2,Object arg3) throws Throwable{
System.out.println("执行前置通知");
}
}
3.配置spring配置文件
3.1 引入aop命名空间
3.2 配置通知类的<bean>
3.3 配置切面
3.4 * 通配符,匹配任意方法名,任意类名,任意一级包名
3.5 如果希望匹配任意方法参数(..)
2.2 AspectJ
1)每个通知不需要实现接口或类
2)配置Spring配置文件是在<aop:config>的子标签<aop:aspect>中配置
3) 配置异常通知的步骤
只有当切点报异常才会触发异常通知,如果想使用schema-base,需要按照特定的要求自己编写
- 声明式事务
. Spring依赖注入
当一个类(A)中需要依赖另外一个类(B)对象时,把B赋值给A的过程就叫依赖注入
DI有三种方式,分别为:
- 接口注入
- Setter方法注入
- 构造方法注入