spring心得4--setter注入集合(set、list、map、properties等多种集合,配有案例解析)@基本装

1. 基本装配

 

    在spring容器内拼凑bean叫做装配。装配bean的时候,需要告诉容器哪些bean以及容器如何使用依赖注入将它们配合在一起。

  使用XML装配(xml是最常见的spring应用系统配置源。)

   几种spring容器都支持使用xml装配bean,包括:

   1).XmlBeanFactory:调用InputStream载入上下文定义文件。

   2).ClassPathXmlApplicationContext:从类路径载入上下文定义文件。

   3).XmlWenApplicationContext:从web应用上下文中载入定义文件。

   上下文定义文件的根元素是<beans>.<beans>有多个<bean>子元素。每个<bean>元素定义了一个bean如何被装配到spring容器中。对bean的最基本的配置包括bean的ID和他的全称类名

基本装配-scope

   scope属性的值有以下五种:prototype、singleton、request session、global-session。

   spring中的bean缺省情况下是单例模式始终返回一个实例。若想返回不同的实例的话需要定义成原型模式


 2.实例化与销毁

    spring实例化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法(bean的声明周期在上篇博客有重墨讲解)。

  <bean class="Foo" init-method destory-method>

  <bean class="...CommonAnnotationBeanPostProcessor">

   spring也提供了两个接口来实现相同的功能:

  InitializingBean和DisposableBean.InitializingBean接口提供了一个afterPropertiesSet()方法。DisposableBean接口提供了destroy().不推荐使用该接口,它将你的bean和springAPI邦定在一起。

3.一些注意事项

    继承配置(继承在bean标签加属性parent属性加以指明,该属性值为继承父类bean的id),覆盖父 Bean配置。

   可以设置 <bean> 的abstract 属性为 true, Spring 不会实例化该Bean有些属性不会被继承. 比如: autowire, abstract 等.子Bean 指定自己的class. 但此时 abstract 必须设为 true

   通过set方法依赖注入

   <bean>元素的< property >子元素指明了使用它们的set方法来注入。可以注入任何东西,从基本类型到集合类,甚至是应用系统的bean

   配置bean的简单属性,基本数据类型和string。

   在对应bean实例的property子标签中设置一个bean类型的属性;这种方式的缺点是你无法在其它地方重用这个bar实例,原因是它是专门为foo而用。

4.setter注入集合

  装配List和数组:

  <property name="barlist">

       <list>

           <value>bar1</value>

           <ref bean="bar2"/>

       </list>

  </property>

 装配set

  <property name="barlist">

       <set>

           <value>bar1</value>

           <ref bean="bar2"/>

       </set>

  </property>

     set使用方法和list一样,不同的是对象被装配到set中,而list是装配到List或数组中装配

 装配map

  <property name="barlist">

       <map>

           <entry key="key1" value="bar1" />

           <entry key="key2 value-ref="xxx" />

      </map>

  </property>

   key值必须是string的,key-ref可以是其他bean。

 设置null

  <property name="barlist">

         <null/>

  </property>

  注入集合的案例分析

    以下类中的属性命名方式和访问权限修饰符都是为了做测试,比如下面属性都是public类型的。实际开发中都是private类型,通过get方法来访问属性,这里只是为了简单测试 。

 执行结果:

spring心得4--setter注入集合(set、list、map、properties等多种集合,配有案例解析)@基本装_第1张图片

 集合bean CollectionBean类

package www.csdn.spring.collection.set;

 

import java.util.List;

import java.util.Map;

import java.util.Properties;

import java.util.Set;

 

publicclass CollectionBean {

   

   //set集合

   public  Set<String> sets;

 

   publicvoid setSets(Set<String> sets) {

      this.sets = sets;

   }

 

   public CollectionBean() {

      System.out.println("初始化。。。。。");

      

   }

   

   //list集合

   public List<User> users;

 

   publicvoid setUsers(List<User> users) {

      this.users = users;

   }

   

   //map集合

   public Map<Integer,User> map;  

 

   publicvoid setMap(Map<Integer, User> map) {

      this.map = map;

   }

   

   //properties集合

   public Properties props;

 

   publicvoid setProps(Properties props) {

      this.props = props;

   }

   

}

  辅助类 user

package www.csdn.spring.collection.set;

 

publicclass User {

 

   public String name;

   public Integer age;

   publicvoid setName(String name) {

      this.name = name;

   }

   publicvoid setAge(Integer age) {

      this.age = age;

   }

   

   

}

测试类 TestBean

package www.csdn.spring.collection.set;

 

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Properties;

import java.util.Set;

 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

publicclass TestBean {

 

   @Test

   publicvoid test() {

      ApplicationContext context = new ClassPathXmlApplicationContext("spring-collection.xml");

      CollectionBean bean = context.getBean("collectionBean",CollectionBean.class);

      

      //set集合

      Set<String> sets = bean.sets;

       //得到迭代器

       Iterator<String> it = sets.iterator();

       while(it.hasNext()){

          System.out.println(it.next());

       }

       

       System.out.println("-------------------------list集合------------------------");

     

       //list集合

       List<User> users = bean.users;

       for(User user : users){

          System.out.println(user.name+"---"+user.age);

       }

       

       System.out.println("--------------------------map集合------------------------");

        

       //map集合

       //方法一:

       Map<Integer,User> map = bean.map;

       //得到map的key键的set集合

       Set<Integer> setKeys = map.keySet();

      //得到key键的迭代器

       Iterator<Integer> itKeys = setKeys.iterator();

      //迭代键值

       while(itKeys.hasNext()){

          //得到一个具体键值

          Integer key = itKeys.next();

          //通过get(key)方法获取到key值对应的value

          User user = map.get(key);

          System.out.println(key+"--"+user.name+"="+user.age);

       }

       System.out.println("========================");

       //方法二:

       Set<Entry<Integer,User>> setEntry = map.entrySet();

       Iterator<Entry<Integer,User>> itEntry = setEntry.iterator();

       while(itEntry.hasNext()){

          Entry<Integer,User> entry = itEntry.next();

          User user = entry.getValue();

          System.out.println(entry.getKey()+"---"+user.name+"="+user.age);

       }

          

       System.out.println("-------------------------properties集合------------------------");

        

       //properties集合

       Properties props = bean.props;

       Set<String> setProps = props.stringPropertyNames();

       Iterator<String> keyStr = setProps.iterator();

       while(keyStr.hasNext()){

          String key = keyStr.next();

          //通过getProperty(key)方法来获取key对应的value值

          System.out.println(key+"----"+props.getProperty(key));

       }

   } 

 

}

  spring配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans.xsd">

 

   <bean id="collectionBean" class="www.csdn.spring.collection.set.CollectionBean">

      <!-- set集合 -->

      <property name="sets">

         <set>

            <value>陈红军</value>

            <value>杨凯</value>

            <value>李伟</value>

            <value>小胖</value>

            <value>潇洒</value>

         </set>

      </property>

 

      <!-- list集合 -->

      <property name="users">

         <array>

            <ref bean="u1" />

            <ref bean="u2" />

            <ref bean="u3" />

         </array>

         <!-- <list> <ref bean="u1"/> <ref bean="u2"/> <ref bean="u3"/> </list> -->

      </property>

 

      <!-- map集合 -->

      <property name="map">

         <map>

            <entry key="1" value-ref="u1" />

            <entry key="2">

                <ref bean="u2" />

            </entry>

            <entry key="3" value-ref="u3" />

         </map>

      </property>

 

      <!--properties集合 -->

      <property name="props">

         <props>

            <prop key="1">jdbc:oracle</prop>

            <prop key="2">jdbc:mysql</prop>

            <prop key="3">jdbc:access</prop>

         </props>

      </property>

 

   </bean>

 

   <bean id="u1" class="www.csdn.spring.collection.set.User">

      <property name="name" value="杨凯" />

      <property name="age" value="22" />

   </bean>

   <bean id="u2" class="www.csdn.spring.collection.set.User">

      <property name="name" value="潇洒" />

      <property name="age" value="22" />

   </bean>

   <bean id="u3" class="www.csdn.spring.collection.set.User">

      <property name="name" value="红军" />

      <property name="age" value="28" />

   </bean>

 

</beans>


 

 

你可能感兴趣的:(spring,bean,集合,Setter注入,杨凯专属频道)