目录
一、Spring Aop
(一)Aop的基本含义
- AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。
(二)Aop的作用
- 软件开发原则:高内聚,低耦合
- Spring的AOP作用在于解耦。AOP让一组类共享相同的行为(比如事务管理、日志管理、安全管理)。
- OOP(Object-Oriented Programming)只能通过继承类或实现接口来增加代码的耦合度,而且类继承是单根继承(不允许一子多父),阻碍了将更多的行为添加到一组类上,此时AOP可以弥补OOP的不足。
(三)AOP与OOP对比
- AOP(Aspect-Oriented Programming)—— 横向的关系
- OOP(Object-Oriented Programming)—— 纵向的关系
(四)AOP使用方式
- Spring采用配置方式使用AOP
- Spring采用注解方式使用AOP
(五)Aop的基本概念
- Aspect(切面):通常是一个类,里面可以定义切入点和通知
- JointPoint(连接点):程序执行过程中明确的点,一般是方法的调
- Advice(通知):AOP在特定的切入点上执行的增强处理,有before、after、after-returning、after-throwing、around
- Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
- AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类
二、Aop的使用:采用配置方式
(一)准备工作
-
在
net.example.spring
包里创建lesson05.aop_xml
子包 -
在
aop_xml
子包里创建杀龙任务类 -SlaveDragonQuest
-
在
aop_xml
子包里创建勇敢骑士类 -BraveKnight
-
在
aop_xml
子包里创建游吟诗人类 -Minstrel
(二)创建Spring配置文件
- 在
resources
里创建aop_xml
目录,在里面创建spring-config.xml
配置文件
1、切点
在使用Spring框架配置AOP时,不管是通过XML配置文件还是注解方式,都需要定义pointcut
(切点)。
2、切点表达式
拦截指定包及其子包下所有类的指定方法:“execution(* net.example.spring.lesson05..*.embarkOnQuest(..))
”
拦截指定包及其子包下所有类的所有方法:“execution(* net.example.spring.lesson05..*.*(..))
”
3、切点函数
execution()
是最常用的切点函数,整个表达式可以分为五个部分。
execution()
:表达式主体。- 第一个
*
号:表示返回类型,*
号表示所有的类型。 - 包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,
net.example.lesson05
包、子孙包下所有类的方法
。 - 第二个
*
号:表示类名,*号表示所有的类
。
5.*(..)
:最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
(三)添加Aop依赖
(四)创建测试类 - TestKnight
- 在
test/java
里创建net.huawei.spring.day05.aop_xml
包,在包里创建TestKnight
类
- 运行查看效果
三、采用注解方式使用AOP
一、准备工作
- 在
net.example.spring
包里创建lesson05.aop_annotation
子包 - 在
aop_annotation
子包里创建杀龙任务类 -SlaveDragonQuest
- 在
aop_annotation
子包里创建勇敢骑士类 -BraveKnight
在aop_annotation
子包里创建游吟诗人切面 -MinstrelAspect
(二)创建Spring配置类
- 在
aop_annotation
子包里创建Spring配置类 -SpringConfig
(三)创建骑士测试类
- 在
test/java/
的aop_annotation
子包里创建测试类 -TestKnight