SpringAOP应用之一:通过注解引入新功能

1,比如想为bean:Student,引入一个自我描述的功能describe();

/*目标类*/
@Component  //声明为bean
public Student{
     ... //类方法,成员域,构造器
}

2,声明一个接口,接口方法声明为这个想新增的describe方法,实现这个接口:

2.1,声明一个接口

/*代理类接口*/
public interface Proxy {
    public void describe();
}

2.2,实现这个接口

/*代理接口的实现类*/
@Component   //声明为一个bean
public classs ProxyImpl {
    public void describe(){
....//具体的方法体
}
}

3,实现一个切面,为目标类(Student)注入代理接口:

@Aspect    //声明为一个切面类
@Component  //声明为一个bean
public class Aop{
    @DeclareParents(value="package.Student+",defaultImpl = ProxyImpl.class)
    Proxy proxy;
}

3.1,注解@DeclareParents的value属性表示目标类,用完全限定的类名来表示,+ 号表示目标类及其子类型,defaultImpl 属性表示代理接口实现类:

3.2,Proxy proxy; 表示为目标类注入的接口

4,实现一个javaconfig,不用xml的方式:

@Configuration   //声明这是一个配置类
@ComponentScan    //组件扫描,类所在的包都会被扫描,将@Component注解的类加入Spring容器
@EnableAspectJAutoProxy  /*启动注解式AOP,不然基于注解式的AOP无法使用*/
public class Config {
}

5,测试:

public class Test{    
public static void main(String[] args) {
        AnnotationConfigApplicationContext ct=
                new AnnotationConfigApplicationContext(Config.class);  //从Config类加载Spring应用上下文
        //不想使用新加入的describe方法,
        Student st=(Student)ct.getBean("student");
        st.getDes();
        //想使用新加入的describe方法,
        Proxy proxy =(Proxy)st;
        proxy.describe();
    }

注:想要使用新加入的功能,那么就将Student对象进行转型(因为已经为Student注入了代理接口)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值