Spring @Import值是不带@Configuration

时间:2019-04-30 01:28:44

标签: java spring spring-boot

请参阅代码,导入的“ SomeController.class”未使用@ Configuration,@ Controller或@Component进行注释,但确实可以使用。

这合理吗,这里有潜在的问题吗?

@Import(SomeController.class)
@Configuration
public class MyConfiguration{
}


public class SomeController{
    @Inject SomeService someService;
    ....
}

2 个答案:

答案 0 :(得分:0)

我是询问者。这是我对测试的结论:

使用@Import(Any.class)和Any.class不在Spring组件扫描范围之内:
1.如果Any.class不使用任何注释进行注释,Spring将创建以完整类命名的Bean:com.xxx.Any

  1. 如果Any.class带有@Component注释,依此类推,Spring将创建以完整类命名的bean:com.xxx.Any

  2. 如果Any.class带有@Component(“ anyBean”)注释,依此类推,Spring将创建名为:anyBean

  3. 的bean。

顺便说一句,如果Any.class在Spring组件扫描范围之内,我们不需要@Import,Spring将创建名为:any的bean

答案 1 :(得分:-1)

仅需要扫描/导入等操作才能找到未找到的bean。如果Spring认为需要bean,那么它将继续加载并初始化它。

例如

@Service
public class MyService {
  @Autowire MyComponent myComponent;
}

即使MyComponent没有被任何注释标记并且没有被任何@Import导入,它也会被Spring实例化,仅因为MyService是必需的。

您可以将@Import等作为Spring的入口点,即从哪里开始寻找bean,然后它将拉动整个层次结构。