接口测试从零开始系列6_简简单单Spring2

上一篇 / 下一篇  2011-12-14 18:54:04 / 个人分类:接口测试

请查看上篇:控制反转及容器

 

Spring的依赖注入

1.      Sringbean配置文件声明bean

   <beanid="pingJiaDao"class="com.koubei.springdiwithbeans.PingJiaDaoImplForSpring">

       <!-- 第一种配置方式-->

      <propertyname="username">

          <value>liuzhan</value>

      </property>

<!-- 第二种配置方式-->

      <!-- <property name="username" value="liuzhan"></property> --> 

<!-- 第三种配置方式-->

      <!--  p:username="liuzhan" -->

   </bean>

2.      实例化ioc容器及bean

   publicstaticvoidmain(String args[]) {

    ApplicationContext context =newClassPathXmlApplicationContext(

          "spring.xml");

    IStoreServiceForSpring storeService = (IStoreServiceForSpring) context

           .getBean("storeService");

 

    PingJia pingJia =newPingJia();

    pingJia.setPingJiaId("123456");

    storeService.addPingJia(pingJia);

}

3.      Bean引用

<beanid="storeService"class="com.koubei.springdiwithbeans.StoreServiceForSpring"

   autowire="byName">

<!—ref local:如果使用了local,验证拥有该idbean是否在同一个xml配置文件里-->

   <propertyname="pingJiaDao">

       <reflocal="pingJiaDao"/>

   </property>

<!—refbean名称可以引用ioc容器里任意的bean,即使不在同一个xml配置文件里-->

   <!-- <property name="pingJiaDao"ref="pingJiaDao"></property> -->

<!—声明内部bean -->

   <!-- <property name="pingJiaDao">

        <bean class="com.koubei.springdiwithbeans.PingJiaDaoImplForSpring">

           <property name="username" value="liuzhan" />

        </bean>

    </property> -->

</bean>

4.      检查属性:

问题:通过setter注入的方式,不能保证所有的属性一定会被注入

解决:spring的依赖检查特性可以检查bean上某些类型的所有属性是否都被设置

方法1:通过dependency-check指定依赖检查模式(缺点:只检查某些类型的所有属性,不能检查特定属性

      <!--业务Bean定义-->

   <beanid="pingJiaDao1"class="com.koubei.springdiwithbeans.PingJiaDaoImplForSpring"

      dependency-check="simple">

      <!-- none:所有属性都可以不设置

            simple简单类型检查

            objects对象类型检查

            all   任意对象类型检查-->

      <propertyname="username"value="liuzhan"></property>

</bean>

方法2:通过Required注解检查特定属性(需要设置<context:annotation-config/>

       @Required//自动检查username属性

       publicvoidsetUsername(String username) {

      this.username= username;

}

5.      Bean的自动装配

问题:bean访问其他bean是需要显式的指定引用

解决:能够自动装配避免显式的指定

方法1:在xml使用autowire自动装配(缺点:如果使用几种方式都无法满足,autowire属性会自动装配bean的所有属性

      <beanid="storeService"class="com.koubei.springdiwithbeans.StoreServiceForSpring"

      autowire="byName">

             <!-- no*:不执行自动装配,需要显式装配依赖

                   byNamebean属性装配与属性同名的bean,但是有时候并不一定属性名和bean名称一致

                   byTypebean属性装配同类型的bean,如果存在多个类型一致的bean,则会失败

                   constructor每个构造器参数,先找出类型与构造器参数一致的bean,然后再找出具有最

                   匹配参数的构造器

                   autodetect如果能够找到默认没有参数的构造器,则依赖byType模式自动装配,否则

                   采用constructor模式-->

      

   </bean>

方法2:使用@Atuowired@Resource自动装配bean(可以配置个别属性,需要注册<context:annotation-config/>

       @Autowired(required =false)//自动匹配类型兼容的bean,默认情况下,应用了@Autowired的属性都需要设置,使用required=false,则属性并不一定要设置

       @Qualifier("pingJiaDao")//自动匹配类型兼容的bean,并且名称是pingJiaDao

       @Resource(name ="pingJiaDao")//根据名称装配

privateIPingJiaDaoForSpringpingJiaDao;

6.      Bean属性集合

Map集合

<beanid="columnNames"class="java.util.HashMap">

   <constructor-arg>

       <map>

          <entrykey="flag"value="1"/>

          <entrykey="caseID"value="2"/>

          <entrykey="caseName"value="3"/>

          <entrykey="caseDes"value="4"/>

          <entrykey="mothed"value="5"/>

          <entrykey="param"value="6"/>

          <entrykey="status"value="7"/>

          <entrykey="resultDes"value="8"/>

       </map>

   </constructor-arg>

</bean>

                   List

       <beanid="idList"class="java.util.List">

          <constructor-arg>

              <list>

                 <value="1"/>

                 <value="2"/>

                 <value="3"/>

                 <value="4"/>

                 <value="5"/>

                 <value="6"/>

                 <value


TAG: Spring spring 接口测试 控制反转

自导自演 引用 删除 409162307   /   2016-08-12 15:03:55
5
 

评分:0

我来说两句

Open Toolbar