Spring将bean定义为自动扫描

时间:2016-08-09 15:18:24

标签: spring autowired

我有一个@Component - 带注释的类,它有几个自动连接的依赖项。我不想自动扫描该软件包,因为它有很多其他我不想要初始化的类。

我可以将@Configuration作为@Bean添加到SELECT name, tid FROM table_name WHERE STATUS = 1 AND ((NAME = 'name1' AND TID = 'tid1') OR (NAME = 'name2' AND TID = 'tid2')) ,但是我不想失去让自动连线的能力,而我实际上并没有在所有地方更改配置他们配置。换句话说,我不想手动列出上述组件的所有依赖项。

我知道我可以使用过滤器进行组件扫描,但是当以上述方式选择不同包中的很多类时,这些都很麻烦。

有没有办法告诉Spring添加和自动连接特定类?

1 个答案:

答案 0 :(得分:1)

JavaDoc可以看出,@ComponentScan注释有几种不同的方式可以注册组件。如果您不想使用过滤器,可能最简单的方法是选择性地添加类和子包进行扫描,而不是应用程序的顶层。例如:

@Configuration
@ComponentScan(
    basePackages = { "me.myorg.myapp.services", "me.myorg.myapp.web" },
    basePackageClasses = { me.myorg.myapp.config.MyDbConfig.class })
public class MyAppConfig { ... }

值得指出的是,您可以创建许多公共静态配置子类。这些将被组件扫描忽略,但可以正常导入其他配置类。如果您只想扫描每个包,然后有选择地扫描或导入子类,这在上面的场景中非常有用:

public class BaseConfig {

    @Configuration
    public static class DbConfigA {...}

    @Configuration
    public static class DbConfigB {...}

}

@Configuration
@ComponentScan(
    basePackages = { "me.myorg.myapp" },
    basePackageClasses = { DbConfigA.class })
public class MyAppConfig { ... }