Spring通过注解引入新功能

(接上篇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.


(未完待续)

猜你喜欢

转载自blog.csdn.net/weixin_41704428/article/details/79985640