引入进来的第三方依赖当中的bean以及配置类不生效

文章讲述了在SpringBoot项目中,如何确保第三方依赖中的bean和配置类生效,包括使用`@ComponentScan`指定扫描包、`@Import`导入类以及利用`ImportSelector`动态导入配置。重点介绍了如何解决启动类所在的包未扫描到第三方依赖包的问题。
摘要由CSDN通过智能技术生成

引入进来的第三方依赖当中的bean以及配置类为什么没有生效

  • 原因就是在类上添加@Component注解来声明bean对象时,还需要保证@Component注解能被Spring的组件扫描到。

  • SpringBoot项目中的@SpringBootApplication注解,具有包扫描的作用,但是它只会扫描启动类所在的当前包以及子包。

  • 当前包:com.itheima, 第三方依赖中提供的包:com.example(扫描不到)

解决问题fang'an

  • 方案1:@ComponentScan 组件扫描

@SpringBootApplication
@ComponentScan({"com.itheima","com.example"}) //指定要扫描的包
public class SpringbootWebConfig2Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootWebConfig2Application.class, args);
    }
}

  • 方案2:@Import 导入(使用@Import导入的类会被Spring加载到IOC容器中)
     

    @Import导入

  • 导入形式主要有以下几种:

    1. 导入普通类

    2. 导入配置类

    3. 导入ImportSelector接口实现类

  • 1). 使用@Import导入普通类:

    @Import(TokenParser.class) //导入的类会被Spring加载到IOC容器中
    @SpringBootApplication
    public class SpringbootWebConfig2Application {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootWebConfig2Application.class, args);
        }
    }

    重新执行测试方法,控制台日志输出:

    image-20230114231709392

    2). 使用@Import导入配置类:

  • 配置类

  • @Configuration
    public class HeaderConfig {
        @Bean
        public HeaderParser headerParser(){
            return new HeaderParser();
        }
    ​
        @Bean
        public HeaderGenerator headerGenerator(){
            return new HeaderGenerator();
        }
    }
  • 启动类

  • @Import(HeaderConfig.class) //导入配置类
    @SpringBootApplication
    public class SpringbootWebConfig2Application {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootWebConfig2Application.class, args);
        }
    }
    

    3). 使用@Import导入ImportSelector接口实现类:

  • ImportSelector接口实现类

  • public class MyImportSelector implements ImportSelector {
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            //返回值字符串数组(数组中封装了全限定名称的类)
            return new String[]{"com.example.HeaderConfig"};
        }
    }
  • 启动类

  • @Import(MyImportSelector.class) //导入ImportSelector接口实现类
    @SpringBootApplication
    public class SpringbootWebConfig2Application {
    ​
        public static void main(String[] args) {
            SpringApplication.run(SpringbootWebConfig2Application.class, args);
        }
    }
    ​

    执行测试方法:

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值