通过切面为特定类引入新功能 aop:declare-parents

通过切面为特定类引入新功能

<aop:aspect>
    <aop:declare-parents
        types-matching="com.luenxin.model.Performer+"     任何类只要实现了 Performer接口(注意结尾的"+")
        implement-interface="com.luenxin.annotation.ISpeaker"   那么也相当于实现了 ISpeaker接口,可以调用ISpeaker接口的方法
        delegate-ref="speaker"             调用 ISpeaker接口方法的实现  由id=speaker的Bean来调用,该Bean必须已实现了ISpeaker接口
    />
</aop:aspect>

Performer performer = (Performer) applicationContext.getBean("druggler");
( (ISpeaker) performer).speakSomething("说了很多话");  // 把performer强转成 ISpeaker,可调用ISpeaker的方法

public interface ISpeaker {
public void speakSomething(String says);
}


目标是 types-matching的类,spring让它实现 implement-interface所指向的接口, 而具体实现则通过default-impl或default-rel属性来赋予。

所以 让 types-matching 的类添加了 接口并且指定了实现。

所以从spring容器中拿出来的 performer 对象   可以被强转换成 ISpeaker 类型的对象。如果调用ISpeaker的方法必须要强转,因为这些都是spring背后做了很多事情。而不是代码显示地继承了它的接口。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值