Spring的AOP
来源:互联网 发布:东阳司法拍卖网淘宝网 编辑:程序博客网 时间:2024/06/11 10:58
理解aop先理解三个概念
切点 通知 切面
pointcut
切点包括两个部分,expression表达式和signature签名,切入点有签名就意味着可以重用.可以把公用的切入点放到一个类中,然后使用类的
全限定类名+切入点签名
通知(advises):决定声明时候通知
以前置通知为例:
@before 前置通知注解
@AfterReturning 后置通知
@After 最终通知
@AfterThrowing 异常通知
@Around 环绕通知
它会在切入点执行之前通知切面中配置@before的方法执行,前置通知只是这个注解,并不包括切面中的方法
切面是一个bean,切面中的方法就是切面的业务逻辑
package cn.aop;import org.springframework.stereotype.Component;@Component("person")//向容器注册,注册id为personpublic class Person { public void sayHello(){ System.out.println("Hello"); } public void sayHello(int age,String str){ System.out.println(age+"---"+str); } public String getInfo(String str){ System.out.println(str); return str; }}
package cn.aop;import org.aspectj.lang.annotation.Pointcut;public class PointCuts { //精确到方法,(..)任意多个形参,(*)一个形参类型不限 ,(*.String)第二个形参的类型为String //第一个* 代表返回值 第二个*紧挨着(..)所以代表方法名 @Pointcut("execution(* cn.aop.Person.*(*))") public void getInfo(){ }}
package cn.aop;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;/** * * 切面是bean * 第一个注解是向容器注册bean * 第二个是声明这个bean是切面 * @author 格拉.香农 * */@Component@Aspectpublic class MyAspect { @Before("cn.aop.PointCuts.getInfo()&&args(String)") public void doBefore(){ System.out.println("前置通知"); } @AfterReturning(pointcut="cn.aop.PointCuts.getInfo()") public void doAfterReturning(){ System.out.println("这是后置通知"); } @After(value="cn.aop.PointCuts.getInfo()") public void doAfter(){ System.out.println("这是最终通知"); }}
package cn.aop;import javax.annotation.Resource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(value="/beans.xml")public class SpringTest { @Resource(name="person") private Person person; @Test public void springTest(){ //person.sayHello(); person.sayHello(12, "Str"); person.getInfo("格拉.香农");}}
环境:
因为是jdk1.8所以使用的aspectjweaver.jar的版本 1.8.9
总之符合aspectjweaver.jar符合jdk版本就行,否则使用pointcut时报错
<bean id="myAspect" class="cn.aop.MyAspect"></bean><aop:config><!--aop:定义切点 --><aop:pointcut id="yff" expression="execution(* cn.aop.Person.*(..) )"/><!--aop: 定义切面 --><aop:aspect id="myAspect" ref="myAspect"><aop:before pointcut-ref="yff" method="doBefore"/><aop:after-returning pointcut-ref="yff" method="doAfter"/></aop:aspect></aop:config>
0 0
- AOP、Spring的AOP
- spring(AOP)Aop的概念
- spring的的AOP
- Spring的AOP实现
- spring的AOP介绍
- Spring的aop
- 6.2 Spring的AOP
- Spring 的AOP运用
- spring aop的理解
- spring aop的讲解
- spring的aop原理
- spring的aop
- spring的AOP配置
- Spring AOP的应用
- Spring的AOP
- Spring的AOP配置
- Spring的aop
- Spring Aop的应用
- 关于mysql的索引相关问题
- 常见的内存错误和对策
- Mybatis - 获取SqlSessionFactory和SqlSession
- 可屏蔽中断和非屏蔽中断区别
- Linux-容易出错/混淆的地方
- Spring的AOP
- webview动画引发的Crash问题
- 利用springaop导致基于实现类注入失败的原因及解决方案
- python连接Mysql数据库字符乱码的问题
- thinkphp中session过期时间的配置
- 数据结构::模拟实现动态栈
- Linux基本命令
- (POJ2406)Power Strings <KMP算法求最小循环节>
- 事务,回滚,数据库管理Transaction