(接上篇Spring使用注解创建切面)
一些编程语言,如Ruby,有开放类的理念.就可以不直接修改对象或类的定义就能够为对象或类增加新的方法;不过Java并不是动态语言.一旦类编译完成,就很难再为类添加新的功能.但利用被称为引入的AOP概念,切面可以为Spring bean添加新方法.
下面将尝试为之前Performance实现下面的Encoreable接口:
package main.java;
/**
* @author myvina@qq.com
* @date 18-4-18 上午10:54
*/
public interface Encoreable {
void performEncore();
}
创建一个新的切面: package main.java;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
/**
* @author myvina@qq.com
* @date 18-4-18 上午10:55
*/
@Aspect
public class EncoreableIntroducer {
@DeclareParents(value = "main.java.Performance+", defaultImpl = main.java.VinaEncoreable.class)
public static Encoreable encoreable;
}
EncoreableIntroducer时一个切面.它通过@DeclareParents注解,将Encoreable接口引入到Performance bean中.
该注解由三部分组成:
1.value属性制定了那种类型的bean要引入该接口.(标记符后面的加号表示是Performance的所有子类型,而不是Performance本身)
2.defaultIml属性指定了为引入功能提供实现的类.
3.@DeclareParents注解所标注的静态属性指明了要引入的接口.
和其他切面一样在配置文件中为EncoreableIntroducer声明为一个bean.
(未完待续)