码迷,mamicode.com
首页 > 编程语言 > 详细

spring AOP编程

时间:2016-06-29 20:29:54      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

1. AOP 简介

AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.

AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.

在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类. 这样一来横切关注点就被模块化到特殊的对象(切面)里.

AOP 的好处:

---每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级

---业务模块更简洁, 只包含核心业务代码.

2. AOP的术语和图形表达

技术分享

切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象

通知(Advice): 切面必须要完成的工作

目标(Target): 被通知的对象

代理(Proxy): 向目标对象应用通知之后创建的对象

连接点(Joinpoint):程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如 ArithmethicCalculator#add() 方法执行前的连接点,执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置

切点(pointcut):每个类都拥有多个连接点:例如 ArithmethicCalculator 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。AOP 通过切点定位到特定的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。

 

项目开发:

1、需要引入一个技术分享

技术分享

 

2、ArithmeticCalculator.java

1 package com.proc;
2 
3 public interface ArithmeticCalculator {
4     int add(int i, int j);
5     int sub(int i, int j);
6     
7     int mul(int i, int j);
8     int div(int i, int j);
9 }

 

 3、ArithmeticCalculatorImpl.java

 1 package com.proc;
 2 import org.springframework.stereotype.Component;
 3 
 4 
 5 @Component("arithmeticCalculator")
 6 public class ArithmeticCalculatorImpl implements ArithmeticCalculator{
 7     public int add(int i, int j) {
 8         int result = i + j;
 9         return result;
10     }
11 
12     public int sub(int i, int j) {
13         int result = i - j;
14         return result;
15     }
16 
17     public int mul(int i, int j) {
18         int result = i * j;
19         return result;
20     }
21 
22     public int div(int i, int j) {
23         int result = i / j;
24         return result;
25     }
26 }

 

 4、LoggingAspect.java

 1 package com.proc;
 2 
 3 import org.aspectj.lang.JoinPoint;
 4 import org.aspectj.lang.annotation.Aspect;
 5 import org.aspectj.lang.annotation.Before;
 6 import org.springframework.stereotype.Component;
 7 
 8 @Aspect
 9 @Component
10 public class LoggingAspect {
11 
12     @Before("execution(* *.*(int,int))")
13     public void beforeMethod(JoinPoint point){
14         System.out.println("正在执行方法: "+point.getSignature().getName());
15     }
16 }

 

配置

1 <context:component-scan base-package="com.proc" />
2 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

测试代码:

1 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
2 ArithmeticCalculator calc=(ArithmeticCalculator) ctx.getBean("arithmeticCalculator");
3 System.out.println(calc.add(3, 5));
4 System.out.println(calc.sub(3, 5)); 
5 System.out.println(calc.mul(6, 2)); 
6 System.out.println(calc.div(6, 2)); 

 

输出结果

正在执行方法add
8
正在执行方法sub
-2
正在执行方法mul
12
正在执行方法div
3

 

spring AOP编程

标签:

原文地址:http://www.cnblogs.com/caoyc/p/5627978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!