前言
前面的文章有说Spring注解是没有继承一说的,那么注解想要其他注解的功能怎么办,这就要用到spring注解的派生性,下面就通过代码来进行验证。
代码验证
写一个自定义注解StringResposity
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic@interfaceStringResposity{/***属性方法名称必须与{@linkComponent#value()}保持一致*@returnbean的名称*/Stringvalue()default"";}
将注解标记在类上
@StringResposity("chineseNameRepository")publicclassNameRepository{/***查找所有的名字*@return*/publicList<String>findAll(){returnArrays.asList("allen","json","diva");};}
编写配置文件,加载配置文件时扫描类
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--找寻被@Component或者其派生Annotation标记的类(Class),将它们注册为SpringBean--><context:component-scanbase-package="com.example.demo.annotation"/></beans>
验证
publicclassDerivedComponentAnnotationBootStrap{publicstaticvoidmain(String[]args){//构建spring上下文ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext();//设置xml的文件地址context.setConfigLocation("classpath:/META-INF/spring/context.xml");//启动上下文context.refresh();//获取文件名为chineseNameRepository的bean对象NameRepositorynameRepository=(NameRepository)context.getBean("chineseNameRepository");//输出用户名System.out.printf("nameRespority.findAll()=%s\n",nameRepository.findAll());}}
如过这里输出了"allen","json","diva"
证明类被扫描到了容器,@StringResposity拥有了@Component的功能,证明存在注解的派生性执行下,执行结果为
nameRespority.findAll() = [allen, json, diva]说明spring存在注解的派生性