AOP 面向切面编程,是 OOP (面向对象编程)的补充

术语

横切关注点:方法中非主要业务逻辑部分
  比如运算的模块:有验证参数、执行方法前的操作、执行方法、执行方法后的操作,验证参数、执行方法前后的操作是横切关注点
  比如权限验证模块:在执行增删改查等方法前要进行验证,主要业务逻辑其实是增删改查,验证权限是横切关注点
  比如日志模块:执行某方法前后都要生成文件或者往文件写入记录,日志记录是横切关注点

切面:横切关注点的抽象到一个类中
  就是把横切关注点封装成一个类,在主要业务逻辑执行根据情况来调用
  声明切面的步骤:1,把该类放入 IOC 容器,进行管理;2,使用注解 @Aspect 表明这是一个切面

通知:是切面类中的方法,用于在目标方法执行时执行

  前置通知(@Before):目标方法执行前
  后置通知(@After):目标方法执行后,无论是否发生异常
  返回通知(@AfterRunning):目标方法正常结束后执行,可以知道目标方法的返回值
  异常通知(@AfterThrowing):目标方法产生异常时执行,可以访问异常对象,进行打印,也可以指定异常才执行
  环绕通知@(Around):包含上面4种
  声明通知的步骤:1,指明通知类型;2,指明目标方法;3,配置文件使通知生效
  连接点:用于获取目标方法的详细信息,方法名,参数值;JoinPoint

示例:

/**
* .切面类
* .第一步:添加 @Aspect 注解
* .第二步:添加 @Component 注解
* .第三步:指明通知类型和目标方法
*/
@Aspect
@Component
public class AspectCompute {
/**
* .第一个 * :任意返回值
* .第二个 * :com.weipai.service 包下的任意类
* .第三个 * :任意方法
* .(..):所有参数,不区分类型
*/
@Before("execution(* com.weipai.service.*.*(..))")
public void beforeMethod(JoinPoint info) {
// 获取目标方法名
String methodName = info.getSignature().getName();
// 获取目标方法参数值
List<Object> args = Arrays.asList(info.getArgs());
System.out.println("前置通知,方法名:" + methodName + ",参数:" + args);
}
}
@Service("compute")
public class Compute {
public void add(int i, int j, String k) {
System.out.println(i + j + k);
}
}
<!-- 扫描,支持spring注解 -->
<context:component-scan base-package="com.weipai.aspect,com.weipai.service" /> <!-- 配置 aspect :自动生成代理类 -->
<aop:aspectj-autoproxy />
public class ComputeTest extends TestCase {

    private ApplicationContext ctx;
private Compute comp; protected void setUp() throws Exception {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
comp = (Compute) ctx.getBean("compute");
} public void testAdd() {
comp.add(1, 3, "hello");
} }

最新文章

  1. Linux下history命令用法
  2. 浅谈-js递归函数
  3. Javascript中大括号“{}”的多义性
  4. BZOJ 1013 &amp; 高斯消元
  5. vs emulator for android使用
  6. imx6 kernel clock
  7. myeclipse中java文件中文注释乱码问题
  8. C# SQL增删查改
  9. Notes on Probabilistic Latent Semantic Analysis (PLSA)
  10. Python学习 - 编写一个简单的web框架(一)
  11. 怎样使用pyinstaller打包
  12. twitter 监控登陆活动
  13. JavaScrtip之JS最佳实践
  14. OC本学习笔记Foundation框架NSString与NSMutableString
  15. Vim实用小技巧
  16. A计划
  17. 如何通过织云 Lite 愉快地玩转 TSW
  18. Python——xlsxwriter模块的使用
  19. java反射机制与动态代理
  20. java中静态代码块的用法和static用法(转)

热门文章

  1. java中编写增删改查
  2. Express框架之Jade模板引擎使用
  3. iReport 5.6.0 组件面板为空 get小技巧
  4. hibernate框架(1)---Hibernate增删改查
  5. nginx 系列 1 linux下安装以及配置IIS分发
  6. mysql 开发基础系列21 事务控制和锁定语句(下)
  7. java-vip介绍
  8. 项目ITP(七) javaWeb 整合 Quartz 实现动态调度 并且 持久化
  9. hd1007
  10. AutoFac (控制反转IOC 与依赖注入DI)