位置: IT常识 - 正文
推荐整理分享Spring(三)-AOP,希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
通知需要在哪些方法上执行的表达式;(可以唯一匹配或模糊匹配);
2.2.1 唯一匹配execution(public int com.kgc.spring.aspectj.ArithmeticCalculator.add(int ,int ))execution(修饰符 返回值类型 方法全类名)
2.2.2 模糊匹配execution(* com.kgc.spring.aspectj.*.*(..)通用切入点表达式含义:
第一个*:代表任意的修饰符,任意的返回值类型;
第二个*:代表任意的类;
第三个*:代表任意的方法;
. . :代表任意的类型和个数的形参;
2.2.3 可重用切入点表达式其他地方直接应用此方法即可;
//重用切入点表达式@Pointcut( "execution(* com.kgc.spring.aspectj.*.*(..))")public void joinPointcut(){}//同一个类中引用@Before("joinPointcut()")@After("joinPointcut()")//其他类中引用(方法全类名)@Before("com.kgc.spring.aspectj.LogAspect.joinPointcut()")2.3 JoinPoint 和 ProceedingJoinPoint2.3.1 JoinPoint 对象JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象。 常用api:
方法名功能Signature getSignature();获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息Object[] getArgs();获取传入目标方法的参数对象Object getTarget();获取被代理的对象Object getThis();获取代理对象2.3.2 ProceedingJoinPoint对象ProceedingJoinPoint对象是JoinPoint的子接口,该对象只用在@Around的切面方法中 添加了 两个方法.
方法名功能Object proceed() throws Throwable执行目标方法Object proceed(Object[] var1) throws Throwable传入的新的参数去执行目标方法2.4 @Before2.4.1 接口ArithmeticCalculator
public interface ArithmeticCalculator { //加 int add(int m,int n); //减 int sub(int m,int n); //乘 int nul(int m,int n); //除 int div(int m,int n);}2.4.2 实现类ArithmeticCalculatorImpl
@Service("arithmeticCalculator")//起别名,方便单元测试,根据别名,从容器中获取public class ArithmeticCalculatorImpl implements ArithmeticCalculator { @Override public int add(int m, int n) { return m + n; } @Override public int sub(int m, int n) { return m - n; } @Override public int nul(int m, int n) { return m*n; } @Override public int div(int m, int n) { System.out.println("====== 执行 div 方法 ======"); return m/n; }}2.4.3 @Before 前置通知在目标方法执行前,自动执行此方法(通过代理实现);
@Component //下一篇:织梦DEDECMS调出指定文章所有图片的代码(织梦怎么调用当前栏目下的文章)
友情链接: 武汉网站建设