Spring_使用注解引入新功能

人行犹可复,岁月难可追。

  Java并不是动态语言,类编译完成后,很难在为该类添加新的功能,但是利用被称为引入的AOP概念,我们可以利用切面为Spring Bean添加新的方法。

  使用@DeclareParents注解,将接口引入到Spring Bean中。

  @DeclareParents注解由三部分组成:

    1)value属性指定了哪种类型的bean要引入该接口。加号(+)表示是该类型的所有子类型,而不是该类型本身。

    2)defaultImpl属性指定了为引入功能提供实现的类。

    3)@DeclareParents注解所标注的静态属性指明了要引入的接口。

package chapter4.practice2;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;

@Aspect
public class EnableFlyIntroducer {
    @DeclareParents(value="chapter4.practice2.People+",defaultImpl=ChinesePeople.class)
    public static EnableFly enableFly;
}
package chapter4.practice2;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@ComponentScan
@EnableAspectJAutoProxy
public class PeopleConfg {

    @Bean
    public People people() {
        return new ChinesePeople();
    }
}

  Spring的自动代理机制将会获取到ChinesePeople bean的声明,当Spring发现一个bean使用了@Aspect注解时,Spring就会创建一个代理,然后将调用委托给被代理的bean或被引入的实现,这取决于调用的方法属于被代理的bean还是属于被引入的接口。

原文地址:https://www.cnblogs.com/dandelZH/p/8947664.html

时间: 2024-11-09 00:50:53

Spring_使用注解引入新功能的相关文章

笔记9 AOP练习3(通过注解引入新功能 )

切面可以为Spring bean添加新方法. 在Spring中,切面只是实现了它们所包装bean相同接口的 代理.如果除了实现这些接口,代理也能暴露新接口的话,会怎么样 呢?那样的话,切面所通知的bean看起来像是实现了新的接口,即便 底层实现类并没有实现这些接口也无所谓. 使用Spring AOP,我们可以为bean引入新的方法. 代理拦截调用并委托给实现该方法的其他对象 需要注意的是,当引入接口的方法被调用时,代理会把此调用委 托给实现了新接口的某个其他对象.实际上,一个bean的实现被拆分

Spring_在XML中通过切面引入新的功能

没有不会做的事,只有不想做的事. 在Java配置中我们借助AspectJde @DeclareParents注解为被通知的方法引入新的方法,在XML中我们可以使用Spring aop命名空间的 <aop:declare-parents>元素. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/be

【版本升级】DevExpress v16.1.8发布 新版本引入一些新功能

[DevExpress v16.1.8下载] 此列表包含了v16.1.8中引入的所有新功能: All WinForms Controls T426102 - TaskbarAssistant - 提供显示JumpListItemTask对象自定义工具提示的功能 DXBars for WPF T417377 - BarCheckItem的Checked State Background类似于DXStyle和Office2016White主题的StatusBar背景 XtraMap T436747

【Spring实战】—— 11 通过AOP为特定的类引入新的功能

如果有这样一个需求,为一个已知的API添加一个新的功能. 由于是已知的API,我们不能修改其类,只能通过外部包装.但是如果通过之前的AOP前置或后置通知,又不太合理,最简单的办法就是实现某个我们自定义的接口,这个接口包含了想要添加的方法. 但是JAVA不是一门动态的语言,无法再编译后动态添加新的功能,这个时候就可以使用 aop:declare-parents 来做了. 如果是可以改写的类,直接实现自定义的接口就行了,下面看看AOP是如何做的! 最开始使用的类和接口: package com.sp

Atitit.mysql&#160;5.0&#160;5.5&#160;&#160;5.6&#160;5.7&#160;&#160;新特性&#160;新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M

巧用React Fiber中的渲染字符串新功能

虽然React Fiber还没有正式发布,但是我们已经可以预先领教其带来的新的编程模式了. 在React Fiber中,render函数可以直接返回一个字符串了,换言之,一个组件可以直接渲染为一个字符串,而不是必须渲染为一个HTML模样的物体. 举个例子,下面这个控件LongString,显示一个input和一个p,p中文字可以是很长的字符串,相当于一个模板,在input中输入的字符串会用来填补p中的模板面. 代码如下. import React from 'react'; class Long

一个新人如何学习在大型系统中添加新功能和Debug

文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业资源管理系统必然难以百分之一百地满足每一家公司的所有要求.所以,在客户提出需求之后,程序员对系统进行增减修改,这就是二次开发. 另外,我们组还负责修复客户报上来的各种漏洞. 学会如何添加新模块新功能 为什么说从头到尾只看代码是不可行的? 基本上,财务系统跨越的年限都会有十几二十年,代码数千万级别,更

Red Hat Enterprise Linux 7的新功能

?? 简介红帽最新版本的旗舰平台交付显著增强的可用性. 性能和可靠性. 丰富的新功能为架构. 系统管理员和开发人员提供所需的资源以更高效地进行创新和管理.架构师: 红帽® 企业 Linux® 7 适合您选择的任意基础架构, 它可以高效地与其他操作环境. 身份验证和管理系统集成到一起. 无论您是要构建网络密集型应用程序. 可大规模扩展的数据资料库, 亦或是一次构建而成但会频繁部署的并在物理. 虚拟和云环境中表现良好的解决方案, 红帽企业 Linux 7 都提供了必要的功能来支持您的项目.系统管理员

Atitit.mysql 5.0 5.5 &#160;5.6 5.7 &#160;新特性 新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M