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

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

相关文章
相关标签/搜索