Spring进阶(一)Spring的自动注入

前言

      本章讲解Spring的自动注入方式

方法

1.概念

我们知道,之前我们使用的依赖注入都是手动的使用setter或者构造器注入,Spring为了方便我们进行依赖注入,提供了以下的方式进行自动的依赖注入。

  • 名称注入(byName):如果要注入的bean的名字和属性名称相同,那么将自动注入
  • 类型注入(byType):如果要注入的bean的类型和属性类型相同,那么将自动注入

2.名称注入

1)局部名称注入

我们之前配置dataSource和sqlSessionFactory的时候,使用了如下的方式进行注入:

你可以发现,sqlSessionFactory的属性dataSource名称和数据源名称相同,那么即符合名称注入的要求。

进行如下配置可等效上面的注入方式:

<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <property name="driverClassName" value="${jdbc.driverClass}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" autowire="byName">
    <!--<property name="dataSource" ref="dataSource"></property>-->
</bean>

可以发现,我们的sqlSessionFactory采用了autowire属性,并且值为byName,意味着将按照名称自动注入!

2)全局名称注入

上面的方式属于在某个bean进行的自动注入方式,可以采用如下配置进行全局的名称注入:

这意味着将全局的依赖注入更改为通过名称的方式,执行效果相同!

2.类型注入

1)局部类型注入

我们之前配置dataSource和sqlSessionFactory的时候,使用了如下的方式进行注入:

 我们可以发现,sqlSessionFactory的属性dataSource类型和数据源类型相同,那么即符合类型注入的要求。

进行如下配置可等效上面的注入方式:

<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <property name="driverClassName" value="${jdbc.driverClass}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置sqlSessionFactory -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean" autowire="byType">
    <!--<property name="dataSource" ref="dataSource"></property>-->
</bean>

可以发现,我们的sqlSessionFactory采用了autowire属性,并且值为byType,意味着将按照类型自动注入!

2)全局类型注入

上面的方式属于在某个bean进行的自动注入方式,可以采用如下配置进行全局的名称注入:

这意味着将全局的依赖注入更改为通过类型的方式,执行效果相同! 

此外:还存在通过构造方法进行的自动注入,用的不多,读者可自行编写测试。

总结:

1.使用byName的注意事项

bean的属性名称必须要和注入的bean的名称相一致否则会报错!

范例:进行如下配置

<!-- 配置数据源 -->
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <property name="driverClassName" value="${jdbc.driverClass}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置sqlSessionFactory -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean" autowire="byName">
    <!--<property name="dataSource" ref="dataSource"></property>-->
</bean>

运行测试类查看结果:

2.使用byType的注意事项

注入属性类型的bean有且只有一个,否则会报错!

范例:进行如下配置

<!-- 配置数据源 -->
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    
</bean>
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
</bean>
<!-- 配置sqlSessionFactory -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean" autowire="byType">
    <!--<property name="dataSource" ref="dataSource"></property>-->
</bean>

运行测试类查看结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值