通过Spring Aop编程思想,利用注解为某些对象添加新的功能
来源:互联网 发布:2014大学生就业率数据 编辑:程序博客网 时间:2024/06/05 11:51
通过Spring Aop编程思想,利用注解为某些对象添加新的功能
- 我们在利用Spring Aop的时候已经利用了切面来为原有的Bean中的方法新增了额外功能。那么我们也可以利用这个思路创建一个切面来为已有的Bean增点额外的功能(额外的方法)
- 以下是展示它是如何工作的
- 为了验证改思路是行的通,我们直接贴代码(亲测)
//方式一:利用注解//引入beanpublic interface Encoreable(){ //被引入的新曾方法 void performance();}//引入bean的实现类@Servicepublic class DefaultEncoreable implements Encoreable { @Override public void encoreable() { System.err.println("利用aop注解为对象增减新功能成功了"); }}public interface PerformService { public void perform(int a);}@Servicepublic class PerformServiceImpl implements PerformService{ @Override public void perform(int a){ System.err.println("11111111111111111"); }}//验证调用结果public class AopT extends BaseTest{ @Resource private PerformService performService; @Test public void get(){ Encoreable encoreable = (Encoreable)performService; encoreable.encoreable(); }} @Aspect //当spring发现有一个此注解的时候,就会创建一个代理类然后将调用委托给被被代理的bean或者被引入的实现public class EncoreableIntroducer(){ @DeclarParents(value="xx.xx.Performance+",defaultImpl=DefaultEncoreable.class) public static Encoreable encoreable;}//与之前的切面一样要在Spring的配置文件里声明这个需要需要创建代理Bean的Bean <bean class="xx.xx.EncoreableIntroducer"></bean>//方式二:利用spring配置文件<aop:config> <aop:aspect> <aop:declare-parents types-matching="xx.xx.Performance+" implement-interface="xx.xx.xx.Encoreable" default-impl="encoreableDelegate" /> </aop:aspect></aop:config><bean id="encoreableDelegate" class="xx.xx.DefaultDecoreable"></bean>
- 可以看到EncoreableIntroducer是一个切面,但是他与我们熟知的切面不同,没有前置,后置,或者环绕的额外功能,但是通过@DeclarParents注解可以将Encoreable接口引入到Performance bean中
- @DeclarParents注解由三部分组成
- value:属性指的是那种类型的bean要引入该接口,在本例子中也就是所有的实现了Performance接口的Bean,”+”标识表示的是Performance的子类型而不是自己。
- defaultImpl:属性指定了为引入功能提供的实现类,改例子中用DefaultEncoreable作为实现类
- @DeclarParents标注的静态属性指明了要引入的接口,在本例子中我们引入的是Encoreable 接口。
阅读全文
1 0
- 通过Spring Aop编程思想,利用注解为某些对象添加新的功能
- 【Spring实战】—— 11 通过AOP为特定的类引入新的功能
- 【Spring实战】—— 11 通过AOP为特定的类引入新的功能
- spring-AOP通过注解@DeclareParents引入新的方法
- Spring的AOP注解编程
- 利用Spring AOP与action注解为系统增加日志功能
- 简单模拟Spring AOP功能 (1) AOP编程思想的理解
- spring添加<aop:aspectj-autoproxy>让注解自为类生成代理对象时出错
- Spring-通过注解实现的AOP
- 通过切面为Spring bean添加新的方法
- Spring 通过注解方式实现AOP切面编程
- Spring 通过注解了解AOP
- Spring AOP中declare-parents为特定的类增加新的功能
- Spring AOP之通过注解编写AOP
- 利用AOP为Spring Data Jpa的接口Repository添加全局自定义过滤
- (13)Spring AOP为目标对象引入新接口
- AOP编程的思想
- spring boot 添加aop功能
- java基础——java无限循环小数判定问题以及BigDecimal详解
- 大一第一学期c语言课程设计,黑框框简易版学生信息管理系统
- Python 中的 @staticmethod 和 @classmethod
- [算法分析与设计] leetcode 每周一题: 215. Kth Largest Element in an Array
- https://maven.google.com studio3.0问题
- 通过Spring Aop编程思想,利用注解为某些对象添加新的功能
- Host管理工具 GasMask
- C++之类
- QT5 自定义事件
- struts2整合axis2后,访问不到wsdl,被struts2拦截的解决办法
- 使用JavaMail报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误
- HTML学习心得(二)
- C++中virtual(虚函数)的用法详解
- java--acm