美文网首页
AspectJ注解

AspectJ注解

作者: 神豪VS勇士赢 | 来源:发表于2018-08-03 20:53 被阅读98次

aop注解
@Component 加入自定义通知类
@Service 加入服务层
@Aspect 声明切面,修饰切面类,获得通知.配合Component使用

注解开发通知
定义切入点
@PointCut ,修饰空方法 private void xxx(){} , 之后通过“方法名”获得切入点引用
在方法前加入注解通知类型:
@Before 前置 加入自定义方法前
@AfterReturning 后置(value="myPoint()",returning="res")


image.png

@Around 环绕


image.png

开发流程
第一步:开发注解的通知类 如下所示 我注释了 前置通知以及后置通知,根据自己的实际情况进行修改。

@Component("AnnotationSLogAdvice")
@Aspect
public class AnnotationSLogAdvice {
@Pointcut("execution( * com.zyh.service...(..))")
public void myPoint(){
}
/* @Before("myPoint()")
public void myBefore(JoinPoint joinPoint){
Log.info("前置");
}/
/
@AfterReturning(value = "myPoint()" ,returning = "res" )
public void myAfter(JoinPoint joinPoint, Object res){
Log.info("后置");
Log.info("我是返回值:"+res);
}*/

    @Around("myPoint()")
    public  Object myAround(ProceedingJoinPoint proceedingJoinPoint){
        Object proceed = null;
        try {
            Log.info("这是环绕的前置");
            proceed = proceedingJoinPoint.proceed();
            Log.info("这是环绕的后置");
        } catch (Throwable throwable) {
        }
        return  proceed;
    }

}

第二步:开发目标接口和实现类(注解方式)

@Service("AnnotationServiceImpl")
public class AnnotationServiceImpl implements AnnotationService {
@Qualifier("AnnotationDaoImpl")
@Autowired
private AnnotationDaoImpl annotationDao;
@Override
public void add() {
annotationDao.addAnnotation();
}

@Override
public String returnAnnotation() {
    return annotationDao.returnAnnotation();
}

}

第三步:开启注解扫描,开启Aspect

<!-- 开启注解扫描 -->
<context:component-scan base-package="com.zyh.dao,com.zyh.service,com.zyh.advice"></context:component-scan>
<!-- 2,开启Aspect注解 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

第四步: 测试
一次只开一种通知做测试,其他的通知先注释

@Test
public void testAnnotationBefore(){
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
AnnotationService annotationService = (AnnotationService) classPathXmlApplicationContext.getBean("AnnotationServiceImpl");
annotationService.add();
}
@Test
public void testAnnotationAfter(){
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
AnnotationService annotationService = (AnnotationService) classPathXmlApplicationContext.getBean("AnnotationServiceImpl");
annotationService.returnAnnotation();
}
@Test
public void testAnnotationAround(){
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
AnnotationService annotationService = (AnnotationService) classPathXmlApplicationContext.getBean("AnnotationServiceImpl");
annotationService.add();
}

打印输出结果如下所示:


image.png

其他情况就不演示了。

相关文章

网友评论

      本文标题:AspectJ注解

      本文链接:https://www.haomeiwen.com/subject/vhwuvftx.html