Spring 概述
- Spring 的核心是控制反转( IoC )和面向切面编程( AOP )。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。
Spring 的主要作用就是降低代码间的耦合度。
IoC 控制反转
- 控制反转( IoC,Inversion of Control ),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。
- Spring 框架使用依赖注入( DI )实现 IoC。
- Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。
- 基于注解的 DI
(1) @Component 该注解的 value 属性用于指定该 bean 的 id 值,不指定 value属性,bean 的 id 是类名的首字母小写
(2) @Controller 用于对 Controller 实现类进行注解
(3) @Service 用于对 Service 实现类进行注解
(4) @Repository 用于对 DAO 实现类进行注解
(5) @Value 需要在属性上使用的注解,该注解的 value 属性用于指定要注入的值
(6) @Autowired 在引用属性上使用注解,该注解默认使用按类型自动装配 bean 的方式
(7) @Resource 在引用属性上使用注解,该注解默认使用按名称自动装配 bean 的方式,如果按名称不能注入 bean, 则会按照类型进行 bean 的匹配注入
AOP 面向切面编程
- AOP( Aspect Orient Programming ),面向切面编程。面向切面编程是从动态角度考虑程序运行过程。
- AOP 底层,就是采用动态代理模式实现的。采用了两种代理:JDK 的动态代理与 CGLIB 的动态代理。
- AspectJ 对 AOP 的实现
3.1 AspectJ 的通知类型:
(1)前置通知
(2)后置通知
(3)环绕通知
(4)异常通知
(5)最终通知
3.2 AspectJ 的切入点表达式举例:
(1) execution ( [modifiers-pattern] 访问权限类型
ret-type-pattern 返回值类型
[declaring-type-pattern] 全限定性类名
name-pattern(param-pattern) 方法名(参数类型和参数个数)
[throws-pattern] 抛出异常类型)
(2) 切入点表达式要匹配的对象就是目标的方法签名。注意,表达式中加[ ]的部分表示可省略部分,各个部分用空格分开。在其中可以使用以下符号:
" * " : 0至多个任意字符
" ·· " : 用在方法参数中,表示任意多个参数;用在包名后,表示当前包及其子包路径
" + " : 用在类名后,表示当前类及其子类;用在接口后,表示当前接口及其实现类
3.3 AspectJ 基于注解的 AOP 实现:
(1) @Before 前置通知——方法有 JoinPoint 参数
(2) @AfterReturning 后置通知——注解有 returning 属性
(3) @Around 环绕通知——增强方法有 ProceedingJoinPoint 参数
(4) @AfterThrowing 异常通知——注解中有 throwing 属性
(5) @After 最终通知
(6) @Pointcut 定义切入点