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


    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方法来访问属性,这里只是为了简单测试 。

     集合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>
  • 相关阅读:
    重写与重载的区别
    UDP模式与TCP模式的区别
    什么是GC?为什么会有GC?
    centos 7-8 安装 ms sql server 2019
    Phaser3 游戏开发入门——自定义构建Phaser库
    Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?
    Visual Studio 2015 Update 3 ISO
    react项目中引用amap
    js 截取网址中的某一段字符串
    解决react下找不到原生高德地图AMap类的问题
  • 原文地址:https://www.cnblogs.com/gongyu/p/4128318.html
Copyright © 2020-2023  润新知