service层AOP(基于注解的方法切入)
来源:互联网 发布:exe软件汉化工具 编辑:程序博客网 时间:2024/04/30 02:54
service层AOP(基于注解的方法切入)
一、导入Maven依赖包
<!-- AOP Pointcut --><dependency><groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>二、spring 配置文件
<!-- 启动对@AspectJ注解的支持 --><aop:aspectj-autoproxy/><aop:aspectj-autoproxy proxy-target-class="true" />三、编写注解类 @interface ServiceAopAnnimport java.lang.annotation.*;@Target({ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ServiceAopAnno { String value() default ""; boolean required() default true;}四、编写AOP切面处理类 ServiceAspectimport org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@Aspect@Componentpublic class ServiceAspect {protected Logger logger = LoggerFactory.getLogger(this.getClass()); //Service层切点 @Pointcut("@annotation(ServiceAopAnno)") public void serviceAspect() { } @Around("serviceAspect()") public void doAround(ProceedingJoinPoint joinPoint) throws Throwable { Object target = joinPoint.getTarget(); Object[] args = joinPoint.getArgs(); if(logger.isDebugEnabled()){ logger.debug("doAround_begin: target: {} ,args: {}" ,target ,args); }//TODO do something before proceed//do target.method try { Object obj = joinPoint.proceed(); } catch (Throwable e) { logger.error("doAround_proceed error:" + e.getMessage() , e); throw e; }//TODO do something after proceedif(logger.isDebugEnabled()){ logger.debug("doAround_end: target: {} ,args: {}" ,target ,args); } }}五、service实现类添加AOP切面注解@Service("messageService")public class MessageServiceImpl implements MessageService {}
六、注意事项1. 确认你的bean 是AopProxy代理的对象:AopUtils.isAopProxy()//
AopUtils.isCglibProxy() //cglib
AopUtils.isJdkDynamicProxy() //jdk动态代理
2. context:component-scan 重复扫描(bean实例化多次)可能影响事务;
3. 基于类的代理而非接口,如果想代理父类的方法,可以用 execution(* com.sishuok.es..service..*+.*(..))4. 切面只能添加到public方法上。
0 0
- service层AOP(基于注解的方法切入)
- AOP 切面的使用,以及如何在通知上获取切入方法的注解和参数
- SSM之Service层基于注解的声明式事物
- Spring AOP - 注解实现统计service中方法的执行时间
- service层spring事务配置(基于注解)
- 基于Struts2中的Action层、Service层、Dao层理解在SpringMVC对应的四大注解
- 关于AOP无法切入同类调用方法的问题
- 关于AOP无法切入同类调用方法的问题
- 关于AOP无法切入同类调用方法的问题
- 关于AOP无法切入同类调用方法的问题
- 关于AOP无法切入同类调用方法的问题
- 关于AOP无法切入同类调用方法的问题
- AOP无法切入同类调用方法的解决办法
- AOP实现拦截对象以及获取切入目标方法和注解
- spring aop学习1:演示代码(通过注解方式匹配切入方法)
- spring3-基于注解的AOP
- 十一、基于注解的AOP
- 基于aspectj的注解aop
- failed to allocate XXXX bytes for committing reserved memory.
- php迭代器的基本例子
- c++上机实验7-项目2-最大公约和和最小公倍数
- 选项卡
- hadoop 之 mapreduce 特性
- service层AOP(基于注解的方法切入)
- linux的exec和source命令区别
- 《剑指offer》:[13]对几万公司员工年龄的排序算法
- mvc下访问数据库和搜索引擎sphinx架构搭建
- Spark知识体系完整解读
- java开发环境搭建
- handler机制的原理
- Winform子窗体刷新父窗体
- java得到类信息的代码演示