Spring-基于注解的IoC(补充)

改造:用配置类取代bean.xml

@Configuration
作用:指定当前类是一个配置类
细节:当配置类作为AnnotationConfigApplicationContext对象创建时的参数,该注解可以不写。

@ComponentScan
作用:用于通过注解指定Spring在创建容器时要扫描的包

属性:

  • value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。
@Configuration
@ComponentScan(basePackages = "com.zg")
public class SpringConfiguration {}

我们使用此注解就等同于在xml中配置了:

<context:component-scan base-package="com.xx"></context:component-scan>

@Bean
作用:用于把当前方法的返回值作为bean对象存入Spring的IoC容器中

属性:

  • name:用于指定bean的id。当不写时,默认值是当前方法的名称

细节:当我们使用注解配置方法时,如果方法有参数,Spring框架会去容器中查找有没有可用的bean对象。
查找的方式和Autowired注解的作用是一样的

 /**
     * 用于创建一个QueryRunner对象
     * @param dataSource
     * @return
     */
    @Bean
    public QueryRunner createQueryRunner(DataSource dataSource){
        return new QueryRunner(dataSource);

    }

    /**
     * 创建数据源对象
     * @return
     */
    @Bean(name="dataSource")//上面方法内的参数
    public DataSource createDataSource(){
        try {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy?serverTimezone=UTC");
            ds.setUser("root");
            ds.setPassword("15436132");
            return ds;
        } catch (Exception e) {
            e.printStackTrace();
        }

对比:bean.xml VS 配置文件

bean.xml:

  <!--告知Spring在创建容器时要扫描的包-->
    <context:component-scan base-package="com.zg"></context:component-scan>

    <!--配置QueryRunner对象-->
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
        <!--注入数据源-->
        <constructor-arg name="ds" ref="dataSource"></constructor-arg>
    </bean>

    <!--配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!--连接数据库的必备信息-->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesy?serverTimezone=UTC"></property>
        <property name="user" value="root"></property>
        <property name="password" value="15436132"></property>
    </bean>

配置文件:

@Configuration
@ComponentScan(basePackages = "com.zg")
public class SpringConfiguration {

    /**
     * 用于创建一个QueryRunner对象
     * @param dataSource
     * @return
     */
    @Bean
    public QueryRunner createQueryRunner(DataSource dataSource){
        return new QueryRunner(dataSource);
    }

    /**
     * 创建数据源对象
     * @return
     */
    @Bean(name="dataSource")
    public DataSource createDataSource(){
        try {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy?serverTimezone=UTC");
            ds.setUser("root");
            ds.setPassword("15436132");
            return ds;
        } catch (Exception e) {
            throw  new RuntimeException(e);
        }
    }
}

@Import
作用:用于导入其他的配置类

属性:

  • value:用于指定其他配置类的字节码。

当我们使用Import的注解之后,有Import注解的类就是父配置类,而导入的都是子配置类。其他需要扫描的配置类都可以在主配置类里@Import导入

@PropertySource
作用:用于指定properties文件的位置
属性:

  • value:指定文件的名称和路径。
  • 关键字:classpath,表示类路径下
@Configuration
@ComponentScan(basePackages = "com.zg")
@Import(JdbcConfig.class)
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration {}

细节:QueryRunner 用注解创建的是单例对象,如果要多例需在后面加上(“prototype”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值