请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

@ComponentScan和@ConditionalOnMissingBean一起使用的问题

@ComponentScan
public class BeanApplication {
	public static void main(String[] args) {
		ApplicationContext context = SpringApplication.run(BeanApplication.class, args);
		TestBean bean = context.getBean(TestBean.class);
		System.out.println(bean);
	}
}

@Component
@ConditionalOnMissingBean(TestBean.class)
class TestBean {
}

在上面的代码中,并没有获取到testBean这个bean。
期望的结果是@ComponentScan可以扫描所有带有@Component的类,然后根据条件@ConditionalOnMissingBean(TestBean.class)加载bean。可是实际上并没有加载,想知道怎么才能加载。

以下2种情况是可以成功加载的
第一种:

@Import(TestBean.class)
public class BeanApplication {
	public static void main(String[] args) {
		ApplicationContext context = SpringApplication.run(BeanApplication.class, args);
		TestBean bean = context.getBean(TestBean.class);
		System.out.println(bean);
	}
}

@ConditionalOnMissingBean(TestBean.class)
class TestBean {
}

第二种:

@ComponentScan
public class BeanApplication {
	public static void main(String[] args) {
		ApplicationContext context = SpringApplication.run(BeanApplication.class, args);
		TestBean bean = context.getBean(TestBean.class);
		System.out.println(bean);
	}
}

@Component
class TestBean {
}

但是这两种情况分别无法达到如下需求
第一种:不能根据@Component扫描到需要加载的bean
第二章:不能根据@ConditionalOnMissingBean进行条件装配

想请教以下,有什么好的解决方案没?

正在回答 回答被采纳积分+3

1回答

小马哥 2020-03-29 11:24:29

请问您使用的版本是多少?@ComponentScan 和 @SpringBootApplication 是存在区别的。

0 回复 有任何疑惑可以回复我~
  • 提问者 lcc_java #1
    当时提问时使用的是2.1.3.RELEASE
    回复 有任何疑惑可以回复我~ 2020-03-29 11:40:19
  • 提问者 lcc_java #2
    将 @ComponentScan 换成 @SpringBootApplication 之后的测试结果是一样的
    回复 有任何疑惑可以回复我~ 2020-03-29 11:42:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信