在上一篇博客中實現了xml+註解的ioc使用,咱們發現,之因此離不開xml配置文件的緣由是在該文件中有一句很關鍵的話,告知spring在建立容器時要掃描的包,依據掃描到的註解建立對象並放入容器中。java
<!-- 開啓註解掃描,告知spring在建立容器時要掃描的包 --> <context:component-scan base-package="com.lyy.service"> </context:component-scan>
而且若是要使用第三方提供的類的對象,咱們也只能在配置文件中配置該bean,如數據庫鏈接池的對象git
<!-- 配置鏈接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
若是能夠把這兩部分也經過註解來完成,就能夠不使用xml配置文件。spring
做用:數據庫
用於指定當前類是一個 spring 配置類, 當建立容器時會從該類上加載註解。 獲取容器時須要使用 AnnotationApplicationContext(有@Configuration 註解的類.class)。ui
屬性:url
value,用於指定配置類的字節碼文件spa
做用:code
用於指定 spring 在初始化容器時要掃描的包。和配置文件中的context:component-scan
標籤做用同樣component
屬性:xml
basePackages:用於指定要掃描的包。和該註解中的 value 屬性做用同樣
做用:
該註解只能寫在方法上,代表使用此方法建立一個對象,而且放入 spring 容器
屬性:
name,給建立的對象指定一個名稱(即 bean 的 id)
做用:
用於加載.properties 文件中的配置
屬性:
value[],用於指定 properties 文件位置。若是是在類路徑下,須要寫上 classpath:
用於在一個配置類上導入另外一個配置類,導入後就能夠在當前配置類上使用導入此配置類中的內容
屬性:value,指定其餘配置類的字節碼
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
工程的總體結構和使用註解+xml配置時同樣,
兩個配置類
JdbcConfiguration
/** * 數據庫鏈接配置類 */ @Configuration @PropertySource(value = "classpath:db.properties") public class JdbcConfiguration { @Value("${jdbc.driverClassName}") private String driverClassName; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; /** * 建立dataSource的bean * * @return */ @Bean(name = "dataSource") public DataSource createDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClassName); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }
SpringConfiguration
@Configuration @ComponentScan(basePackages = "com.lyy") @Import(value = JdbcConfiguration.class) public class SpringConfiguration { /** * 建立 common-dbutils的核心對象 * @return */ @Bean(name="queryRunner") public QueryRunner createQueryRunner(@Qualifier("dataSource") DataSource dataSource){ return new QueryRunner(dataSource); } }
最後在獲取spring容器時要使用AnnotationConfigApplicationContext
示例工程地址
示例工程地址