2014-06-12 37 views
0

我一直在使用Spring 3.2+一段時間,大多數情況下,我可以使用下面的任何一個選項,它的工作原理,但我想知道是否有什麼特別的區別。掃描@Configuration類和@Import配置類之間的區別

這裏是我的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; 
} 
} 

我可以使用下列選項:

OPTION 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); 

} 

} 

OPTION 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

任何人都可以解釋這兩者之間的區別嗎?

謝謝。

回答

0

現在我只能弄清楚兩點不同:

  • 明顯的一個是,通過成分的掃描,也可以拾取其他組件,而不僅僅是配置類,這可能是在同一個包。這可能會導致導入可能不需要的bean,但是我發現使用@Import時不太可能使用
  • ,您可以選擇在導入的類上實現接口,並且可以訪問導入類的註釋元數據,如果它對您有用
+1

第二點看起來有些用處,我不知道。 還有什麼你想指出的? – dharam

+0

在執行'@ Import'時,您必須知道需要加載的所有配置類。當開發更大的應用程序時,這可能很困難,因此掃描「@ Configuration」類更容易,並且允許更多面向組件的設計。 (你可以用xml文件做btw)。 –

+0

目前我沒有添加任何東西 –

相關問題