Spring AOP 详解
来源:互联网 发布:自学网络编程 编辑:程序博客网 时间:2024/06/03 20:10
AOP: 面向切面的编程,通过预编译或者动态代理实现程序功能的技术。利用AOP 可以对各模块进行解耦。使业务逻辑各部分耦合度降低,提高重用性,开发效率。
实现原理: 在以前的开发中AOP底层采用代理机制实现,代理机制的实现又分为 JDK 动态代理和cglib字节码增强。 现在Spring2.0开始 已经加入对Aspect的支持。Spring容器所生产的就是代理类Proxy。
Spring中创建代理对象就很简单了
1: 在Spring配置文件中 先生成几个类 一个是目标类 一个是切面类
创建一个 切面类 并且继承于 MethodInterceptor 重写invoke函数
@Overridepublic Object invoke(MethodInvocation arg0) throws Throwable {System.out.println("前"); Object obj= arg0.proceed();System.out.println("后");return obj;}
<!-- 创建目标类 --> <bean id="us" class="com.heima.proxy.auto.UserServerImpl"></bean> <!-- 创建切面类 --> <bean id="adpet" class="com.heima.proxy.auto.MyAdpet"></bean>创建之后按照逻辑应该确定切面和目标的关系 并且制定代理哪几个方法
利用 <aop:config> 标签来进行 关系的绑定
<!-- AOP编程 --> <aop:config> <!-- 切入点 --> <aop:pointcut expression="execution(* com.heima.proxy.auto.UserServerImpl.deeteUser(..))" id="mypointcut"/> <!-- 通知 特殊切面 --> <aop:advisor advice-ref="adpet" pointcut-ref="mypointcut"/> </aop:config>
aop:advisor 标签 就是告诉容器 advice-ref我要使用哪个切面 pointcut-ref :这里就使用Aspect表达式 来告诉容器使用怎么样的表达式
aop:pointcut:这里申明一个Aspect表达式
配置完这些 在创建 符合表达式要求的类 就会自动加上 切面类的执行方法 。
spring 还给我们整理了一套基于注解的配置
注解使用流程如下 默认加上了spring 所有的命名空间
1: 在配置文件中扫描注解类
<context:component-scan base-package="com.he ima.proxy.xml"></context:component-scan>
2:确定AOP的生效
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
3: 先使用@Component("userImpl")对目标类进行对象创建 设置对象ID
4:对切面类进行对象创建@Component 并申明该类为切面类 @Aspect 这里不需要继承于MethodInterceptor
在切面类中创建你需要执行的方法。 利用 @Before 或者@After 可以制定 在目标类方法执行前执行或执行后执行。 并且在该注解上还可以使用Aspect 表达式
@Component@Aspectpublic class MyAdpet {@Before("execution(* com.heima.proxy.xml.UserServerImpl.*(..))")public void before() {System.out.println("在方法之前执行");}@After("execution(* com.heima.proxy.xml.UserServerImpl.*(..))")public void after() {System.out.println("在方法之后执行");}}创建符合 Aspect 表达式 的类 并且执行方法 就会自动执行切面函数
- 详解Spring AOP
- Spring AOP 详解
- Spring AOP 详解
- Spring AOP 详解
- Spring AOP 详解
- Spring AOP详解
- Spring AOP 详解
- Spring AOP 详解
- Spring AOP 详解
- spring AOP详解
- Spring AOP 详解
- Spring--AOP详解
- Spring中的AOP详解
- Spring aop学习详解
- Spring AOP 详解
- Spring AOP 详解
- Spring AOP 详解
- Spring AOP 详解
- 单元测试的,无法转发
- SpringMVC数据校验
- Faker,好用的数据填充库
- Android事件处理方法总结-Handler消息处理
- linux之文件类型
- Spring AOP 详解
- 并发容器之CopyOnWriteArrayList
- 【软件测试】单元测试
- 【Debug】不能实例化抽象类
- python/pandas数据分析(十六)- 数据索引与选取
- 【九度】哈夫曼树
- Node实践总结1——快速开始
- jquery 中的.done()和.always()
- ucos全局变量