当前位置: 首页 > 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());}}

相关文章:

  • Spring Boot + MyBatis日志前缀清除方法
  • IDEA的git提交代码提交失败,有错误0 个文件已提交,1 个文件提交失败:
  • DEM 地形分析与水文建模:基于 ArcGIS 的流域特征提取
  • 矩阵批量剪辑源码开发,OEM贴牌
  • Spring Boot 整合 Security 权限控制中的常见陷阱
  • 每日算法 -【Swift 算法】实现有效括号匹配算法
  • SpringBoot前后台交互 -- 登录功能实现(拦截器+异常捕获器)
  • SpringCloud系列 - Nacos 配置中心(二)
  • 美食推荐系统微信小程序
  • 咖啡豆缺陷检测:用YOLOv8+TensorFlow实现工业级质检系统
  • 力扣HOT100之贪心算法:45. 跳跃游戏 II
  • 3 Studying《深入理解Android卷(邓凡平)》2
  • 考试中关于机动车安全技术检验标准(如 GB 7258、GB 21861 等)的考核重点有哪些?
  • 物联网配置记录
  • 鸿蒙开发-封装一个顶部标题栏
  • FastAPI系列20:fastapi-amis-admin,即开即用的后台框架(2)
  • BUG调试案例十四:TL431/TL432电路发热问题案例
  • SLAM3R:基于单目视频的实时密集3D场景重建
  • UE5 学习系列(六)导入资产包
  • Pandas:让数据起舞的Python魔法手册
  • 能源网站建设公司/关键词规划师
  • 兼职网站项目建设报告(完整版)/宁波seo关键词排名
  • ps设计师网站/360竞价推广登录入口
  • 网站建设人员配置/dsp投放方式
  • 攻击自己做的网站/百度浏览器网址
  • wordpress static page/网页优化seo广州