当前位置:  开发笔记 > 编程语言 > 正文

@ComponentScan在Spring启动AutoConfiguration类中不起作用?

如何解决《@ComponentScan在Spring启动AutoConfiguration类中不起作用?》经验,为你挑选了2个好方法。

我正在尝试创建一个新的启动器.我有一个业务模块,比如ProjectManager,它包含一些用@Component注释的类.在本教程之后,我创建了一个autoconfigure模块,它包含一个AutoConfiguration类.首先,我尝试使用@ComponentSan在我的业务模块中查找bean.

@ComponentScan(value = {"com.foo.project"})
@ConditionalOnClass({Project.class})
@Configuration
public class ProjectAutoConfiguration {
    ....

}

但它不起作用.我必须添加其他配置类,如下所示:

@Configuration
@ComponentScan(value = {"com.foo.project"})
@MapperScan(value = {"com.foo.project"})
public class ProjectConfig {
}

然后将其导入AutoConfiguration类,如下所示:

@Import(ProjectConfig.class)
@ConditionalOnClass({Project.class})
@Configuration
public class ProjectAutoConfiguration {
    ....

}

这样可行.但根据春季文件.

自动配置使用标准的@Configuration类实现

所以我的问题是,为什么@ComponentScan在这里不起作用?我做错了什么?或者它是按设计的?



1> emoleumassi..:

你必须将compentscan注释用于主类.这是一个示例代码:

@SpringBootApplication
@ComponentScan("com.foo.project")
public class MainApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MainApplication.class);
    }

    public static void main(String[] args) {
        new MainApplication().configure(new SpringApplicationBuilder(MainApplication.class)).run(args);
    }
}

干杯



2> 小智..:

自动化所有内容都需要Application类(使用@SpringBootApplication注释)位于比要扫描的组件更"高"的包中.

使用:

package com.example.foo;

为您的应用程序,并将组件放在一个包,如:

package com.example.foo.entities;

另请参见https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有