当前位置: 首页 > news >正文

实现 Spring Boot 3的组合注解,java

Spring Boot 启动类的注解 @SpringBootApplication 就是组合注解。

@SpringBootApplication
public class BaiJingApplication {public static void main(String[] args) {SpringApplication.run(BaiJingApplication.class, args);}
}

获取部分代码,内容自己去看源代码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {@AliasFor(annotation = EnableAutoConfiguration.class)Class<?>[] exclude() default {};@AliasFor(annotation = EnableAutoConfiguration.class)String[] excludeName() default {};

假设已经 有了两个类,要创建一个组合注解:

resources- Common.imports

创建文件 Common.imports ,文件内容为

biz.baijing.beanimport.conf.ComConf

配置文件的全类名;假设配置文件的内容。

@Configuration
public class ComConf {@Beanpublic Con con() {return new Con();}@Beanpublic Pro pro(Con con) {System.out.println(con);return new Pro();}
}

这是一个标准的 Bean 注入的配置文件;Con 和 Pro 是两个实体类。

package biz.baijing.beanimport.conf;import ...public class ComImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {List<String> list = new ArrayList<>();InputStream isFile = ComImportSelector.class.getClassLoader().getResourceAsStream("com.imports");BufferedReader br = new BufferedReader(new InputStreamReader(isFile));String line;try{while ((line = br.readLine()) != null) {list.add(line);}}catch (Exception e){throw new RuntimeException(e);}finally {if (br != null) {try {br.close();} catch (IOException e) {throw new RuntimeException(e);}}}return list.toArray(new String[0]);}
}

然后创建 Annotation 文件

package biz.baijing.beanimport.anno;import ... @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ComImportSelector.class)
public @interface EnableComConfiguration {}

在启动类应用 Annotation 文件即可

package biz.baijing.beanimport.starter;import ...@SpringBootApplication
@EnableComConfiguration                   // 引用
public class BeanImportApplication {public static void main(String[] args) {ApplicationContext context = SpringApplication.run(BeanImportApplication.class, args);// 测试代码,以下Con con = context.getBean(Con.class);System.out.println("<Con> " + con.toString());Pro pro = (Pro) context.getBean("AA");System.out.println("<Pro> " + pro.toString());}}

http://www.xdnf.cn/news/981919.html

相关文章:

  • S2B2B农产品供应链交易多平台开发有哪些发展前景?如何维护?
  • docker 安装postgre并使用php进行连接
  • Spring MVC完全指南 - 从入门到精通
  • 华为交换机远程登录配置
  • 大语言模型的局限性与RAG基本框架和工作流实例
  • python数据结构和算法(4)
  • R语言缓释制剂QBD解决方案之三
  • 浅析hashmap
  • 7.7 Extracting and saving responses
  • C# 与低代码平台的融合:以活字格为例的 Web API 开发实践
  • 布尔字段命名陷阱:避免序列化错误的关键
  • pytorch 中前向传播和后向传播的自定义函数
  • vscode界面设置透明度--插件Glasslt-VSC
  • 【DETR目标检测】ISTD-DETR:一种基于DETR与超分辨率技术的红外小目标检测深度学习算法
  • 《HarmonyOSNext弹窗:ComponentContent动态玩转企业级弹窗》
  • 新闻类鸿蒙应用全链路测试实践:性能、兼容性与体验的深度优化
  • React Context 性能问题及解决方案深度解析
  • 【普及/提高−】P1025 ——[NOIP 2001 提高组] 数的划分
  • Cilium动手实验室: 精通之旅---23.Advanced Gateway API Use Cases
  • codeforces C. Devyatkino
  • Java并发工具包
  • 【59 Pandas+Pyecharts | 淘宝华为手机商品数据分析可视化】
  • 深度解读谷歌Brain++液态神经网络:重塑动态智能的流体计算革命
  • Gogs:一款极易搭建的自助 Git 服务
  • [Java恶补day22] 240. 搜索二维矩阵Ⅱ
  • React第六十节 Router中createHashRouter的具体使用详解及案例分析
  • android studio向左向右滑动页面
  • Babylon.js引擎
  • MMDG++:构筑多模态人脸防伪新防线,攻克伪造攻击与场景漂移挑战
  • java面向对象高级部分