扫描@Configuration类和@Import配置类之间的区别

时间:2014-06-12 03:36:24

标签: spring

我一直在使用Spring 3.2+已有一段时间了,大部分时间我都可以使用以下任一选项而且它有效,但我想知道是否有任何具体的区别。

这是我的JndiConfig java配置类:

@Configuration
public class JndiConfig {

@Bean(name = "dataSource")
public DataSource dataSource() throws Exception {
    BasicDataSource datasource = new BasicDataSource();
    datasource.setDriverClassName("com.mysql.jdbc.Driver");
    datasource.setUrl("jdbc:mysql://localhost:3306/csdb");
    datasource.setUsername("root");
    datasource.setPassword("root");
    datasource.setValidationQuery("SELECT 1");
    return datasource;
}
}

我可以使用以下选项:

选项1

@Configuration
@Import({JndiConfig.class})
@EnableWebSecurity
public class SecurityConfig  extends WebSecurityConfigurerAdapter  {

@Autowired
private DataSource dataSource;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth.jdbcAuthentication().dataSource(dataSource);

}

}

选项2

@Configuration
@EnableWebSecurity
@ComponentScan(basePackages = "com.security"
public class SecurityConfig  extends WebSecurityConfigurerAdapter  {

@Autowired
private DataSource dataSource;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth.jdbcAuthentication().dataSource(dataSource);

}

}

选项1 中,我导入JndiConfig,如选项2 ,我只对JndiConfig进行组件扫描。

有人能解释一下这两者之间的区别吗?

感谢。

1 个答案:

答案 0 :(得分:0)

现在我只能弄清楚两个不同之处:

  • 显而易见的是,通过使用组件扫描,您还可以拾取可能位于同一个包中的其他组件,而不仅仅是配置类。这可能导致您可能不想要的导入bean,但我发现不太可能
  • 使用@Import时,您可以选择在导入的类上实现 ImportAware 接口,这样您就可以访问导入类的注释元数据,如果它对你