关于aop:Spring-Aop

10次阅读

共计 1696 个字符,预计需要花费 5 分钟才能阅读完成。

一,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 类,在其中增加要额定实现的性能,留神注解)

正文完
 0