@Import 注解

@Import注解是用来导入配置类或者一些需要前置加载的类。

支持 三种方式
1.带有@Configuration的配置类(4.2 版本之前只可以导入配置类,4.2版本之后 也可以导入 普通类)
2.ImportSelector 的实现
3.ImportBeanDefinitionRegistrar 的实现
添加链接描述

1.配置类

2.ImportSelector

ImportSelector接口只定义了一个selectImports(),用于指定需要注册为bean的Class名称。
添加链接描述

3.ImportBeanDefinitionRegistrar

  • ImportBeanDefinitionRegistrar类只能通过其他类@Import的方式来加载,通常是启动类或配置类。
  • 使用@Import,如果括号中的类是ImportBeanDefinitionRegistrar的实现类,则会调用接口方法,将其中要注册的类注册成bean。
  • 实现该接口的类拥有注册bean的能力。
    ————————————————
    版权声明:本文为优快云博主「haienenen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.youkuaiyun.com/jiachunchun/article/details/94569246
`@Import`注解可以通过快速导入的方式将实例加入Spring的容器中,其有三种使用方法,且该注解只能作用在类上[^1]。以下为你详细介绍其使用方法: ### 直接导入类 这种方式直接将指定的类注入到Spring容器中。示例代码如下: ```java import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; // 定义一个需要注入的类 class Test { // 类的具体内容 } // 使用@Import注解将Test类注入到Spring容器 @Import({Test.class}) @Configuration public class Myclass2 { // 类的具体内容 } ``` 上述代码通过`@Import({Test.class})`将`Test`类注入到Spring容器中,`@Configuration`表明这是一个配置类[^5]。 ### 导入`ImportSelector`实现类 `ImportSelector`是一个接口,实现该接口并重写`selectImports`方法,可动态选择需要导入的类。示例代码如下: ```java import org.springframework.context.annotation.ImportSelector; import org.springframework.core.type.AnnotationMetadata; // 实现ImportSelector接口 class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { // 返回需要导入的类的全限定名 return new String[]{"com.example.Test"}; } } import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; // 使用@Import导入MyImportSelector @Import(MyImportSelector.class) @Configuration public class MyConfig { // 类的具体内容 } ``` 在上述代码中,`MyImportSelector`实现了`ImportSelector`接口,并重写`selectImports`方法返回需要导入的类的全限定名。`@Import(MyImportSelector.class)`将`MyImportSelector`导入,Spring会根据`selectImports`方法的返回值来注入相应的类。 ### 导入`ImportBeanDefinitionRegistrar`实现类 `ImportBeanDefinitionRegistrar`接口允许手动注册`BeanDefinition`。示例代码如下: ```java import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; // 实现ImportBeanDefinitionRegistrar接口 class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { // 创建一个BeanDefinition RootBeanDefinition beanDefinition = new RootBeanDefinition(Test.class); // 注册BeanDefinition registry.registerBeanDefinition("test", beanDefinition); } } import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; // 使用@Import导入MyImportBeanDefinitionRegistrar @Import(MyImportBeanDefinitionRegistrar.class) @Configuration public class MyConfig2 { // 类的具体内容 } ``` 在上述代码中,`MyImportBeanDefinitionRegistrar`实现了`ImportBeanDefinitionRegistrar`接口,并重写`registerBeanDefinitions`方法手动注册`BeanDefinition`。`@Import(MyImportBeanDefinitionRegistrar.class)`将`MyImportBeanDefinitionRegistrar`导入,Spring会调用`registerBeanDefinitions`方法来注册相应的`Bean`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值