一. AOP与@AspectJ
AOP 是 Aspect Oriented Programming 的缩写,意思是面向方面的编程。我们在系统开发中可以提取出很多共性的东西作为一个 Aspect,可以理解为在系统中,我们需要很多次重复实现的功能。比如计算某个方法运行了多少毫秒,判断用户是不是具有访问权限,用户是否已登录,数据的事务处理,日志记录等等。
AOP的术语
- 连接点(Joinpoint)
程序执行的某个特殊位置:比如类开始初始化前,类初始化后,某个方法调用前,调用后等。 连接点 可 以 理解为AOP向目标类织入代码的地方。
- 切点(Pointcut)
每一个类都有许多的连接点,所以AOP通过切点来定位特定的连接点。可以通过数据库查询的概念来理解切点和连接点的关系:连接点相当于数据库中的记录,而切点就是查询条件。切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。
- 增强(Advice)
增强就是织入到目标类连接点上的一段代码。它既包含了添加到目标连接点上的一段执行逻辑,也包含了用于定位连接点的方位信息。
AspectJ是语言级的AOP实现,它扩展了AOP的语法,能够在编辑提供横切代码的织入。@AspectJ是AspecJ1.5新增的功能,它通过JDK5.0的注解技术,允许开发者在POJO中定义切面。
二. 自定义注解
因为@AspectJ是基于JDK5.0的注解技术实现,所以我们有必要了解一下注解相关的知识,并学习如何自定义一个注解。
注解(Annotation)是代码的附属信息,它可以用来修饰类,属性,方法,同时它遵循一个基本原则,注解不能直接干扰程序代码的运行,无论是增加或者删除注解,代码都能正常运行。
(1)一个简单的注解类
Java规定使用@interface修饰定义的注解类。一个注解类可以拥有多个成员,成员声明和接口方法声明类似。
package com.wbl.aop;
2:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
7:
/**
* Created by Lulala on 2015/7/15.
*/
//声明注解的保留期限
//声明可以使用该注解的目标类型
//定义注解
//声明注解成员
15: }