spring學習3:spring ioc的純註解配置

spring ioc的純註解配置

1、分析

在上一篇博客中實現了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

2、新註解說明

2.1 @Configuration

做用:數據庫

用於指定當前類是一個 spring 配置類, 當建立容器時會從該類上加載註解。 獲取容器時須要使用 AnnotationApplicationContext(有@Configuration 註解的類.class)。ui

屬性:url

value,用於指定配置類的字節碼文件spa

2.2 @ComponentScan

做用:code

用於指定 spring 在初始化容器時要掃描的包。和配置文件中的context:component-scan標籤做用同樣component

屬性:xml

basePackages:用於指定要掃描的包。和該註解中的 value 屬性做用同樣

2.3 @Bean

做用:

該註解只能寫在方法上,代表使用此方法建立一個對象,而且放入 spring 容器

屬性:

name,給建立的對象指定一個名稱(即 bean 的 id)

2.4 @PropertySource

做用:

用於加載.properties 文件中的配置

屬性:

value[],用於指定 properties 文件位置。若是是在類路徑下,須要寫上 classpath:

2.5 @Import

用於在一個配置類上導入另外一個配置類,導入後就能夠在當前配置類上使用導入此配置類中的內容

屬性:value,指定其餘配置類的字節碼

3、經過配置類獲取容器

ApplicationContext ac =
new AnnotationConfigApplicationContext(SpringConfiguration.class);

4、舉例:使用純註解對實現帳戶的crud操做

工程的總體結構和使用註解+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

示例工程地址
示例工程地址

相關文章
相關標籤/搜索