Spring—AOP-注解编程
上节我们谈到了,关于Aop的AspectJ的全自动编程,它图普通的全自动编程的区别就在于它的特点:不用实现接口,方法名随意,但是有参数必须符合规范,因为配置文件就是通过这些参数来照切入点的,而传统方式是实现了相应的接口,再实现接口里面的方法;
好了废话不多说了,今天价绍的是AspectJ的注解开发:
注解还是之前再IOC里面将的那些注解在加上一下注解:
@Before @AfterReturning @Around @Aspect 具体用法将会再下文中提到:
1首先我们同样应该创建通知类,但创建通知类的时候应该加注解,还有一些要注意的点:
1) 我们应该先建一个通知类再类名之前
加注解@Component 然后再加 @Aspect—表面这是一个切面
2) 在类里面我们应该首先创建一个切点函数(我是这么命名的方便理解)、
切面函数的特点就是没有参数 没有函数体 而且函数名称随意(本文以myPoint为例);
在这个函数之上我们加注解
@PointCut(“ execution(* com.ww.service.*.*(..))”)//切入点表达式+PointCut声明表面这是一个切入点;
3) 首先类创建前置通知
注解是@Before(“myPoint()”)
这样的注解,首先Before表示这是一个前置通知,括号内的函数表示切入点
配置文件扫描注解的时候,从这里得到切入点;代码如下:
@Before("mypoint()")
public void myBefore(JoinPoint joinPoint){这里的参数也要写和之前一样
System.out.println("前置通知");
}
4) 在来创建后置通知
注解是@AfterRuturning(“value=mypoint()”,returning=”res”)
同样AfterRuturning表示这是一个后置通知;
Value表示的是切入点,returning表示的是返回值,
读过前文应该都知道返回参数,这就不做赘述了。代码是:
@AfterReturning(value= "mypoint()",returning="res")
public void myAfter(JoinPoint joinPoint,Object res){
System.out.println("后置通知"+res);
}
这里再强调一下注意的地方:
第一:与之前在配置文件中配置后置通知时,参数的名称要与方法里的参数名称一致,同样在这里注解中的返回值名称也要和方法里的一样。
第二:为什么之前的几个没有value?
因为当你的参数只有一个的时候value是可以省略的;
有多个参数的时候要表明你的每一个参数代表什么所以必须写;
第三:也是小编经常犯的错误就是参数之间的逗号一定记得写,否则报错;
5) 最后来创建环绕通知
注解是@Around(“myPoint”)
意思一样就不多赘述代码如下:
@Around("mypoint()")
public Object myAround(ProceedingJoinPointproceedingJoinPoint) throws Throwable {
System.out.println("环绕钱");
Objecta=proceedingJoinPoint.proceed();
System.out.println("还绕后");
return a;
}
解释一下:环绕通知的参数和之前的不一样它的类型是ProceedingJoinPoint
在这就是使用环绕通知是必须手动调用方法,用的就是参数.proceed()’;它是由返回值的;
2 我们来创建目标类
对于目标类与之前的区别IOC是注解的没什么区别注解就是
@Service(“该实现类的父接口名称”)
需要注意的就是注解一定是加在实现类上的,就像配置的时候class的值是它的实现类的包名+类名是一样的;
3我们类配置核心文件applicotionContext.xml
像之前一样注解方式我们只需要开启注解扫描即可
但是此处我们用的是AspectJ的注解方式,所以我们还应该开启的就是AspectJ的自动扫描,代码如下:
开启注解扫描
开启的就是AspectJ的自动扫描
4最后我们进行测试就行了下面是测试代码
UserService userService=(UserService) new ClassPathXmlApplicationContext("applicationContext.xml").getBean("UserService");
// userService.add();
userService.find();
下面是效果图
以上就是AspectJ的注解开发。
由于我们还没有整合IOC与AOP,所以现在是分开做分开做测试,
在后面的博文中会为大家代理IOC与AOP的整合 Spring与Mybatis等的整合,敬请期待!!!!!!
版权声明:本文为博主原创文章,未经博主允许不得转载。