import org.springframework.context.annotation.Configuration;
@Configuration用於定義配置類,可替換xml配置文件,被注解的類內部包含有一個或多個被@Bean注解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並
用於構建bean定義,初始化Spring容器
。
Spring Boot不需要在xml配置注解掃描,需要你保證你的啟動Spring Boot main入口,在這些類的上層包就行。
@Configuation
等價於<Beans></Beans>
@Bean
等價於<Bean></Bean>
@Configuration
public class ExampleConfiguration {
@Value("com.mysql.jdbc.Driver")
private String driverClassName;
@Value("jdbc://xxxx.xx.xxx/xx")
private String driverUrl;
@Value("root")
private String driverUsername;
@Value("123456")
private String driverPassword;
@Bean(name = "dataSource")
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(driverUrl);
dataSource.setUsername(driverUsername);
dataSource.setPassword(driverPassword);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
@Autowired
private DataSource dataSource
;
這個dataSource
就是我們在ExampleConfiguration中配的DataSource
@Component
注解也會當做配置類,但是並不會為其生成CGLIB代理Class
,所以執行了兩次new
操作,所以是不同
的對象。當時@Configuration
注解時,生成當前對象的子類Class,並對方法攔截,第二次new
時直接從BeanFactory之中獲取對象,所以得到的是同一個對象。