您的位置:首页 > 编程语言 > ASP

AspectJ的注解方式实现AOP

2020-07-18 04:42 1006 查看

1.引入spring基础包
2.引入aspectJ的jar包
  com.springsource.org.aopalliance-*.jar
  com.springsource.org.aspectj.weaver-*.jar

3.spring.xml加入相关配置

<!-- 设置使用注解的类所在的包 -->
<context:component-scan base-package="net.shibit.*"/>
<!-- 使AspectJ注解起作用:自动为匹配的类生产代理对象 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

4.实现目标类

public class AServiceImpl implements AService {

public void barA() {
System.out.println("...");
}
}

5.定义切面类

@Order(1)
@Aspect
@Component
public class LoggingAspect {

private final Logger logger = Logger.getLogger(LoggingAspect.class);

@Before("execution(* net.shibit.service.*.*(..))")
public void serviceBeforeMethod(JoinPoint joinPoint) {
**
logger.info(..);
}
}

@Aspect 定义切面类
@Componet 将这个类加入Spring的IOC容器;
@Order(1) 指定切面的优先级,数值越小优先级越高

切入点表达式execution(* net.shibit.service.*.*(..))
  第一个*号:表示返回类型,*号表示所有的类型。
  第二个*号:表示类名
  括号里面表示方法的参数,两个句点表示任何参数。
通知类型
  @Before 前置通知,在方法执行之前执行
  @After 后置通知,在方法执行之后执行
  @AfterRunning 返回通知,在方法返回结果之后执行
  @AfterThrowing 异常通知,在方法抛出异常之后执行
  @Around 环绕通知,围绕着方法执行

实现AOP,目标(target)类就需生成动态代理。注意:
  1、目标类如果实现了某一个接口,那么Spring就会利用JDK类库生成动态代理。
  2、目标类没有实现某一个接口,那么Spring就会利用CGLIB类库直接修改二进制码来生成动态代理,需要引用CGLIB类库
参考
  http://shamrock.blog.51cto.com/2079212/1557639
  http://www.cnblogs.com/yeming/p/5444959.html
  http://zhuchengzzcc.iteye.com/blog/1504014
  http://blog.csdn.net/wangpeng047/article/details/8560694

 

转载于:https://www.cnblogs.com/shibit/p/7105652.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: