(接上篇Spring使用注解创建切面)
一些编程语言,如Ruby,有开放类的理念.就可以不直接修改对象或类的定义就能够为对象或类增加新的方法;不过Java并不是动态语言.一旦类编译完成,就很难再为类添加新的功能.但利用被称为引入的AOP概念,切面可以为Spring bean添加新方法.
下面将尝试为之前Performance实现下面的Encoreable接口:
package main.java; /** * @author [email protected] * @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 [email protected] * @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.
(未完待续)