一,AOP术语说明

1,通知Advice:

在AOP中,切面的工作被称为通知。通知定义了切面“是什么”以及“何时”使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。Spring切面可以应用5中类型的通知:
`
(1)前置通知(Before):前置通知,在方法执行之前执行;
(2)后置通知(After):后置通知,在方法执行之后执行;
(3)返回通知(After-returning):返回通知,在方法返回结果之后执行;
(4)异常通知(After-throwing):异常通知,在方法抛出异常之后执行;
(5)环绕通知(Around):环绕通知,围绕着方法执行;

`

2,连接点(Join point):

连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时,抛出异常时,甚至是修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加行为。

3,切点(Pointcut):

如果说通知定义了切面“是什么”和“何时”的话,那么切点就定义了“何处”。比如我想把日志引入到某个具体的方法中,这个方法就是所谓的切点。

4,切面(Aspect):

切面是通知和切点的结合。通知和切点共同定义了切面的全部内容————它是什么,在何时和何处完成其功能。

三、使用基于注解的方式实现AOP

1.需要引入相关的jar,使用maven

`

com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
`

2、在Spring的配置文件中加入 aop 的命名空间

3、需要在Spring的配置文件中,加入如下配置:


<!-- 自动扫描的包 --> 
<context:component-scan base-package="com.scorpios.spring.aop.impl"></context:component-scan> 
<!-- 使 AspectJ 的注解起作用 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

组件扫描(component scanning):Spring 能够从classpath下自动扫描, 侦测和实例化具有特定注解的组件。

特定组件包括:

@Component: 基本注解, 标识了一个受Spring管理的组件 @Respository: 标识持久层组件 
@Service: 标识服务层(业务层)组件 
@Controller: 标识表现层组件

对于扫描到的组件, Spring有默认的命名策略: 使用非限定类名, 第一个字母小写。 也可以在注解中通过value属性值标识组件的名称

3、编写业务方法接口

public interface ArithmeticCalculator { 
     
      int add(int i,int j); 
     int sub(int i,int j); 
      int mul(int i, int j); 
      int div(int i, int j); 
 }

4、实现业务方法 (注意此处Component注解)

@Component
public class ArithmeticCalculatorImpl implements ArithmeticCalculator {

    @Override
    public int add(int i, int j) {
        int result = i + j;
        return result;
    }

    @Override
    public int sub(int i, int j) {
        int result = i - j;
        return result;
    }

    @Override
    public int mul(int i, int j) {
        int result = i * j;
        return result;
    }

    @Override
    public int div(int i, int j) {
        int result = i / j;
        return result;
    }
}

5、 编写切面类:(是一般的Java类,在其中添加要额外实现的功能,注意注解)


半颠
24 声望3 粉丝