String Bean 依赖查找 依赖注入 自动装配

1. Spring Bean 依赖管理


1.1 依赖查找

实际项目中会存在很多个 Bean 对象,这些对象之间会存在一定依赖关系,当某个 Bean 对象依赖于其他 Bean 对象,可以通过 Spring 按照一定的规则(例如按类或者按名字),进行依赖查找然后进行值的注入

思考:
1)对象与对象之间可能存在什么关系?(is a,has a,use a)
 例如:
 a) is a 关系
 class A implements IA {}; A 实现了 IA 接口
 class A extends B {}; A 继承了 B 这个类
 b) has a 关系
 class Point {}
 class Circle {
     private Point point
 }
 circle 对象中有一个 Point 类型的对象
 c) use a 关系
 class ProjectUtil {
     public String getId(){
       return UUIDrandomUUID().toString();
     }
 }
 在 ProjectUtil 里使用了 UUID 这个类

1.2 依赖注入

在 spring 中对 Bean 属性赋值的过程我们称之为依赖注入,这种注入的实现方式有两种: set 注入和构造注入
set 注入式通过对象的 set 注入是通过对象的 set 方法为对象的属性赋值,构造注入为通过 bean 对象的构造方法为属性注入值
注入
1.2.1. 依赖注入的基本实现
1.1 set 方式实现基本值的注入(重点掌握)

<bean id="dataSource" class="beans.DataSource">
           <property name="driverClassName" value="com.jdbc.mysql.Driver"/>
           <property name="url" value="jdbc:mysql:///test"/>
           <property name="username" value="root"/>
           <property name="password" value="root"/>
     </bean>

执行 set 注入时引用其他 bean 对象

 <bean id="sessionFactory" class="beans.SqlSessionFactory">
           <property name="dataSource" ref="dataSource"/>
 </bean>

1.2. 构造方法实现基本值的注入(了解)
此注入必须有一个有两个参数的构造方法

    <bean id="dataSource" class="beans.DataSource">
    <constructor-arg value="10"/>
           <constructor-arg value="20"/>
   </bean>

执行构造注入时引用其他 bean 对象(必须有对应的构造方法)

    <bean id="sessionFactory"
           class="beans.SqlSessionFactory">
           <constructor-arg ref="dataSource"/>
     </bean>

1.2.2 集合类型对象值的注入
对象定义:

    public class CollectionObject {
         private List<String> list;
         private Map<String,Object> map;
         private Properties properties;
         public void setList(List<String> list) {
            this.list = list;
         }
         public void setMap(Map<String, Object> map) {
            this.map = map;
         }
         public void setProperties(Properties properties) {
            this.properties = properties;
         }
       ...
    }

对象配置:

    <bean id="collection"  class="beans.CollectionObject">
         <property name="list">
            <list>
               <value>A</value>
               <value>B</value>
            </list>
         </property>
         <property name="map">
            <map>
              <entry key="k1" value="100" />
              <entry key="k2" value="300" />
            </map>
         </property>
         <property name="properties">
            <props>
               <prop key="username">root</prop>
               <prop key="password">123456</prop>
            </props>
         </property>
    </bean>

1.2.3.依赖注入时 spring
在类路径下定义一个 config.properties 文件,
config.properties
内容如下:

username=root
password=123456

在 bean 中为属性注入值时使用 spring 表达式

    <bean id="dataSource" class="beans.DataSource">
           <property name="username" value="#{cfg.username}"/>
           <property name="password" value="#{cfg.password}"/>
     </bean>

其中#为 spring 表达式特殊标记,{}为表达式内容,cfg 为 util:properties 标记中定义的 id、username、password 为配置文件等号左边的 key

1.3自动装配

Spring 应用中还可以按照一定规则自动为对象属性注入值,此机制借助 Bean 标签中的 autowire 属性进行配置,此属性的值如下几个:
1) default : 不执行自动装配(默认)
2) byName : 按属性名对应的 set 方法名进行自动装配
3) byType: 按属性类型对应的 set 方法相关参数类型进行装配
4) constructor: 按构造方法参数类型进行装配
例如:

    <bean id="jdbcTemplate" 
           class="beans.JdbcTemplate"
           autowire="byType">
    </bean>

此代码中的自动装配是按照 jdbcTemplat 类中相关属性类型查找对应参数类型的 set 方法,然后再按依据其类型从 spring 容器中查找对应类型的 bean 对象,最后调用对应 set 方法进行值的注入。


本小节中先了解基于 xml 方式配置的自动装配机制(重点在注解方式的应用)


2. 总结


2.1 重点和难点分析

1. Bean 对象的依赖注入(基本值,引用值,集合对象)
2. Bean 对象的自动装配(byName,byType,constructor)

2.2 常见FAQ

1. 自动装配中 byName 和 byType 有什么不同?
2. Spring 表达式在依赖注入中如何使用?
3. ......

2.3 作业

1. 总结本节知识点
2. 完成本节中案例
3. 去了解预习Spring Bean 注解应用    
4. 了解 Lru 算法
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值