Spring学习第二话-DI

Spring -02

1.什么是DI

Dependence Injection 依赖注入(依赖注射)
一个组件 需要另外一个组件时 把组件的值设置给这个组件的过程叫做依赖注入
解决的是组件之间的装配问题

2. 完成DI的三种方式

1.setter注入
参考对象类型中定义的set方法
<bean id=" " class="">
	<property name="去set方法之后首字母小写 "  value=" 值" />
</bean>
优点: 灵活。可以选择性地注入需要的对象。
缺点: 依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。


2.构造器注入
参考构造方法的参数
把上面的property 换成constructor-arg
其实构造器注入 还支持把name 换成index index 代表参数的位置 编号从0开始
优点: 对象初始化完成后便可获得可使用的对象。
缺点: 当需要注入的对象很多时,构造器参数列表将会很长;
       不够灵活。若有多种注入方式,每种方式只需注入指定几个依赖,那么        就需要提供多个重载的构造函数,麻烦。



3.自动化注入
再定义一个bean时 可以通过bean标记的 autowire 指定对应的加载方式
让bean自动查找对应的组件进行装配。一般用来解决复杂值的注入。
autowire  的取值方式有 
		byName  安装属性名进行装配 
		byType  按照属性的类型进行匹配
		constructor   按照构造方法的参数进行匹配 如果第一个参数不匹配 则终止后续赋值


4、接口注入
依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参数就是要注入的对象。
优点:  接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数        是要注入的对象类型即可。
缺点: 侵入性太强,不建议使用。
PS:什么是侵入性?
如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性

3. 如何创建DataSource 对象 并注入对应参数 的值

 <!--  配置连接池对象 -->
	 <bean  id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource">
	     <property name="driverClassName"  value="com.mysql.jdbc.Driver"></property>
	     <property name="url"  value="jdbc:mysql://127.0.0.1:3306/mysql"></property>
	     <property name="username"  value="root"></property>
	     <property name="password" >
	          <value>123456</value>
	     </property>
	 </bean>

4. 如何注入java的集合参数

  5.1 简单值的注入
  八种基本类型 和 对应的封装类  String  枚举   
  使用value 赋值 即可 
  5.2 复杂值的注入 
  把value 换成 ref
  5.3 集合参数的注入 
  
   把java 中的集合通过配置文件形式给一个对象 注入 
  List   Set    Map   Properties  
  
  <property name="friends">
      <list>
          <value>小杰</value>
          <value>小马</value>
          <value>小泽</value>
          <value>小泽</value>
      </list>
  </property>
  
  --------------set-------------
    <property name="friends">
        <set>
            <value></value>
        </set>
     </property>   
       
     -------------map------------
    <property name="friends">
        <map>
            <entry   key=""  value="" />
        </map>
     </property>
     
    -----------Properties-------------
    Properties 的注入 
    <property name="friends">
    	<props>
    		<prop key="">阿吉</prop>
    	</props>
    </property>
     
     
   7.集合参数的单独定义  
   把一个集合对象 抽取出来 单独进行定义  然后被其它对象引用即可
   
      ------<单独定义一个list>-----
     <util:list  id="ref_friend">
          <value>小杰</value>
          <value>小马</value>
          <value>小泽</value>
          <value>小泽</value>
      </util:list>
      <property name="friends" ref="ref_friend">
      
     -----------set---------- 
      <util:set  id="ref_friend">
      	 <value>小泽</value>
      </util:set>
      <property name="friends" ref="ref_friend">
       
       ----------map------------
      <util:map  id="ref_friend">
      	<entry   key=""  value="" />
      </util:map> 
      <property name="friends" ref="ref_friend">
      
      --------Properties---------
      <util:Properties id="ref_friend">
    		<prop key="">阿吉</prop>
      </util:Properties>
      <property name="friends" ref="ref_friend">

5. 什么是组件扫描 组件扫描的实现步骤

组件扫描叫 Component  Scan   它是Spring 提供的一套基于注解(标注)
    目的是为了简化XML 的配置。
    
    解决自定义类
    
a.建立一个项目 导入jar包(ioc aop) 拷贝配置文件到src下 
b.开启组件扫描 
        <context:component-scan    base-package="包" />
c.编写一个java 类   编写对应的成员变量 和 方法 ....
d.在类上加对应的标注  
      @Component    通用层标注  -----工具类、用户类
      @Service      服务层标注  ---- service类
      @Repository   持久层标注  ---- dao
      @Controller   控制层标注  ----  servlet/controller     
e.创建Spring 容器 从容器中获取bean 进行测试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值