Spring 注解之 @Import
@Import注解是用于给Spring容器导入组件,其主要的使用方式有下列三种
一、@Import
1、@Import注解的详细信息如下:
1 2 3 4 5 6 7 | @Target (ElementType.TYPE) @Retention (RetentionPolicy.RUNTIME) @Documented public @interface Import { // @Import注解的取值是一个Class类型的数组,可以同时填写多个类的字节码文件 Class<?>[] value(); } |
2、@Import注解的使用位置
1 2 3 4 | public enum ElementType { // 使用在类上、接口上(包括注解类型)、或者是枚举声明上 /** Class, interface (including annotation type), or enum declaration */ TYPE, |
3、@Import注解语法格式
@Import({类1.class,类2.class,类3.class......})
4、测试@Import注解
一、准备几个测试类,PineApple,Plum、WaterMelon
二、Spring的配置类
1 2 3 4 5 | @Configuration // 使用@Import将下面三个组件导入到Spring中,交由Spring容器进行管理 @Import ({PineApple. class ,Plum. class ,WaterMelon. class }) public class SpringConfiguration { } |
三、测试类
1 2 3 4 5 6 7 8 9 10 11 12 | public class SpringDemo { @Test public void springTest01() { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration. class ); // 获取并输出所有Bean的名称 String[] beanDefinitionNames2 = context.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames2) { System.out.println(beanDefinitionName); } } } |
四、测试结果
1 2 3 4 5 6 7 8 9 10 11 12 | // Spring容器自身组件 org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory // Spring配置类 springConfiguration // 自定义组件 com.spring01.bean.PineApple com.spring01.bean.Plum com.spring01.bean.WaterMelon |
二、实现ImportSelector接口&&@Import注解
1、自定义类(MyImportSelector)实现ImportSelector接口
1 2 3 4 5 6 7 8 9 | public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { // 定义一个字符串数组,里面定义你要注入到Spring容器中的类,(包类路径) String[] strArr = { "com.spring01.bean.WaterMelon" , "com.spring01.bean.PineApple" }; return strArr; } } |
2、配置类
1 2 3 4 5 | @Configuration // 导入自定义类MyImportSelector @Import (MyImportSelector. class ) public class SpringConfiguration { } |
3、测试类
1 2 3 4 5 6 7 8 9 10 11 12 | public class SpringDemo { @Test public void springTest01() { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration. class ); // 获取并输出所有Bean的名称 String[] beanDefinitionNames2 = context.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames2) { System.out.println(beanDefinitionName); } } } |
4、测试结果
1 2 3 4 5 6 7 8 9 10 11 | // Spring容器自身组件 org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory // Spring配置类 springConfiguration // 自定义要导入的组件 com.spring01.bean.WaterMelon com.spring01.bean.PineApple |
三、实现ImportBeanDefinitonRegistrar接口&&@Import注解
1、自定义类MyImportBeanDefinitionRegistrar实现ImportBeanDefinitionRegistrar接口,并且手动实现registerBeanDefinitions方法
1 2 3 4 5 6 7 | public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { // 指定Bean的信息 RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Plum. class ); // 注册bean时指定bean对应的id registry.registerBeanDefinition( "plum" ,rootBeanDefinition); } } |
2、配置类
1 2 3 4 | @Configuration @Import ({MyImportSelector. class ,MyImportBeanDefinitionRegistrar. class }) public class SpringConfiguration { } |
3、测试类
1 2 3 4 5 6 7 8 | @Test public void springTest01() { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration. class ); // 获取并输出所有Bean的名称 String[] beanDefinitionNames2 = context.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames2) { System.out.println(beanDefinitionName); } } |
4、测试结果
1 2 3 4 5 6 7 8 9 10 11 12 13 | // Spring容器自身组件 org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory // Spring配置类 springConfiguration // 使用实现ImportSelector接口和@Import注解实现注入组件 com.spring01.bean.PineApple com.spring01.bean.WaterMelon // 使用实现ImportBeanDefinitionRegistrar接口和@Import注解实现注入组件 plum |
分类:
Spring 常用注解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?