zoukankan      html  css  js  c++  java
  • Spring3实战第二章第二小节 IOC依赖注入 list和map集合

    Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式。

     平常的Java开发中,程序员在某个类中需要依赖其它类的方法。

        通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。

        Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。

        依赖注入的另一种说法是"控制反转"。通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员。

        而控制反转是指new实例工作不由我们程序员来做而是交给Spring容器来做。

    构造器注入:  本文使用构造器注入和引用了一个bean

    先写出需要引用的bean的接口

    package com.spring;
    
    public interface SpringAocInterface {
        void show();
    }

    实现接口

    package com.spring;
    
    public class SpringAocInterfaceIm implements SpringAocInterface {
    	
    	private final static String Lings = "最近的烦恼是小小的离别带来的寂寞,一瞬间的邂逅与分别,这一个一个的刹那,我想好好珍惜起来。";
    	@Override
    	public void show() {
    	
    	System.out.println(Lings);
    		
    	}
    
    }

    需要注入的类 (提供了一个String属性和一个对象  都是通过构造方法注入)

    package com.spring;
    
    /**
     * 使用构造方法
     * @author Administrator
     *
     */
    public class SpringIoc {
        private String Song;  //构造方法注入
        
        private SpringAocInterface springAocInterface; //构造方法引入对象注入
    
        public SpringIoc(String song, SpringAocInterface springAocInterface) {
            super();
            Song = song;
            this.springAocInterface = springAocInterface;
        }
        
        public void show() {
            System.out.println("构造方法传入的Song为 :" +Song);
            System.out.print("构造方法引入的对象为:");
            springAocInterface.show();
        }
        
        
        
    }

    xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context-3.0.xsd
                         http://www.springframework.org/schema/aop
                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                         http://www.springframework.org/schema/tx
                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
            <!-- 构造方法注入 -->
         <bean id="SpringIoc" class="com.spring.SpringIoc">
         	<constructor-arg  name="song" value="5"></constructor-arg>  <!-- 给SpringIoc中的song属性注入-->
         	<constructor-arg name="springAocInterface" ref="SpringAocInterfaceIm"></constructor-arg><!-- 给SpringIoc中的springAocInterface 注入bean -->
         </bean>
         <bean id="SpringAocInterfaceIm" class="com.spring.SpringAocInterfaceIm"></bean>
    <beans>

    写一个测试类

    package com.spring.test;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.spring.SpringIoc;
    
    public class SpringIocTest {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
            SpringIoc bean = (SpringIoc) context.getBean("SpringIoc");
            bean.show();
        }
    }

    输出结果

    十月 15, 2017 10:19:50 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1e3bd51: startup date [Sun Oct 15 22:19:50 CST 2017]; root of context hierarchy
    十月 15, 2017 10:19:50 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [spring.xml]
    十月 15, 2017 10:19:50 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@e40e825: defining beans [SpringIoc,SpringAocInterfaceIm,SpringSetIoc]; root of factory hierarchy
    构造方法传入的Song为 :5
    构造方法引入的对象为:最近的烦恼是小小的离别带来的寂寞,一瞬间的邂逅与分别,这一个一个的刹那,我想好好珍惜起来。

    2:set注入(里面包括set注入 属性  list集合  map集合  引入bean)

    package com.spring;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * Spring通过Set注入
     * @author Administrator
     *
     */
    public class SpringSetIoc {
        private String name;
        
        private  int age;
        
        private SpringAocInterface like;
        
        private List<Object> list; 
        
        private Map<String, Object> map ;
        
        public void show() {
            System.out.println("通过set方法注入的姓名为:" + name);
            System.out.println("通过set方法注入的年龄为:" + age);
            System.out.print("通过set方法注入对象" + name + "最喜欢的一句话为:");
            like.show();
            System.out.print("通过set方法注入" + name + "最喜欢吃的水果为:");
            for (Object object : list) {
                System.out.print(object + ",");
            }
            System.out.println();
            System.out.print("通过set方法注入map key为string : ");
            for (String m : map.keySet()) {
                System.out.print(map.get(m) + ",");
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public SpringAocInterface getLike() {
            return like;
        }
    
        public void setLike(SpringAocInterface like) {
            this.like = like;
        }
    
        public List<Object> getList() {
            return list;
        }
    
        public void setList(List<Object> list) {
            this.list = list;
        }
    
        public Map<String, Object> getMap() {
            return map;
        }
    
        public void setMap(Map<String, Object> map) {
            this.map = map;
        }
        
        
        
    }

    xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context-3.0.xsd
                         http://www.springframework.org/schema/aop
                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                         http://www.springframework.org/schema/tx
                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
           
         <bean id="SpringAocInterfaceIm" class="com.spring.SpringAocInterfaceIm"></bean>
         <!-- set注入 -->
           <bean id="SpringSetIoc" class="com.spring.SpringSetIoc">
              <property name="name" value="张三"></property>
              <property name="age" value="18"></property>
          <!--     <property name="like" ref="SpringAocInterfaceIm"></property> --> <!-- 这个是注入公共bean  如果需要注入内部bean 并不想被共享可以使用下面的注入方式   -->
              <property name="like">
                  <bean class="com.spring.SpringAocInterfaceIm"></bean>
              </property>
              <property name="list">  <!-- 这个是注入list集合 这个是注入的值  如果想注入bean的话  可以 写成  <ref bean = "bean的名称"></ref> -->
                  <list>
                      <value>香蕉</value>
                      <value>橘子</value>
                      <value>苹果</value>
                  </list>
              </property>
              <property name="map"><!-- map注入 -->
                  <map>
                      <entry key="男士" value="李四"></entry>
                      <entry key="男士" value="王五"></entry>
                      <entry key="女士" value="小花"></entry>
                  </map>
              </property>
          </bean> 
          <!-- spring还提供了P命名空间  减少了尖括号  使用p命名空间的时候  需要在上方引入xmlns:p="http://www.springframework.org/schema/p" 这句代码 不然会报错  两者方法取其一就好  我使用的上面的方式-->
          <!--  <bean id="SpringSetIoc" class="com.spring.SpringSetIoc" p:name = "张三" 
           p:age = "18" 
           p:like-ref="SpringAocInterfaceIm"/> -->
    </beans>

    测试类

    package com.spring.test;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.spring.SpringSetIoc;
    
    public class SpringSetIocTest {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
            SpringSetIoc bean = (SpringSetIoc) context.getBean("SpringSetIoc");
            bean.show();
        }
    }

    输出结果

    十月 15, 2017 10:26:14 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7f1633fd: startup date [Sun Oct 15 22:26:14 CST 2017]; root of context hierarchy
    十月 15, 2017 10:26:15 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [spring.xml]
    十月 15, 2017 10:26:15 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@741c42a9: defining beans [SpringIoc,SpringAocInterfaceIm,SpringSetIoc]; root of factory hierarchy
    通过set方法注入的姓名为:张三
    通过set方法注入的年龄为:18
    通过set方法注入对象张三最喜欢的一句话为:最近的烦恼是小小的离别带来的寂寞,一瞬间的邂逅与分别,这一个一个的刹那,我想好好珍惜起来。
    通过set方法注入张三最喜欢吃的水果为:香蕉,橘子,苹果,
    通过set方法注入map key为string : 王五,小花,

    最后奉上完整版的xml配置文件 包含构造注入和set注入

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                         http://www.springframework.org/schema/context
                         http://www.springframework.org/schema/context/spring-context-3.0.xsd
                         http://www.springframework.org/schema/aop
                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                         http://www.springframework.org/schema/tx
                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
            <!-- 构造方法注入 -->
         <bean id="SpringIoc" class="com.spring.SpringIoc">
             <constructor-arg  name="song" value="5"></constructor-arg>  <!-- 给SpringIoc中的song属性注入-->
             <constructor-arg name="springAocInterface" ref="SpringAocInterfaceIm"></constructor-arg><!-- 给SpringIoc中的springAocInterface 注入bean -->
         </bean>
         <bean id="SpringAocInterfaceIm" class="com.spring.SpringAocInterfaceIm"></bean>
         <!-- set注入 -->
           <bean id="SpringSetIoc" class="com.spring.SpringSetIoc">
              <property name="name" value="张三"></property>
              <property name="age" value="18"></property>
          <!--     <property name="like" ref="SpringAocInterfaceIm"></property> --> <!-- 这个是注入公共bean  如果需要注入内部bean 并不想被共享可以使用下面的注入方式   -->
              <property name="like">
                  <bean class="com.spring.SpringAocInterfaceIm"></bean>
              </property>
              <property name="list">  <!-- 这个是注入list集合 这个是注入的值  如果想注入bean的话  可以 写成  <ref bean = "bean的名称"></ref> -->
                  <list>
                      <value>香蕉</value>
                      <value>橘子</value>
                      <value>苹果</value>
                  </list>
              </property>
              <property name="map"><!-- map注入 -->
                  <map>
                      <entry key="男士" value="李四"></entry>
                      <entry key="男士" value="王五"></entry>
                      <entry key="女士" value="小花"></entry>
                  </map>
              </property>
          </bean> 
          <!-- spring还提供了P命名空间  减少了尖括号  使用p命名空间的时候  需要在上方引入xmlns:p="http://www.springframework.org/schema/p" 这句代码 不然会报错 -->
          <!--  <bean id="SpringSetIoc" class="com.spring.SpringSetIoc" p:name = "张三" 
           p:age = "18" 
           p:like-ref="SpringAocInterfaceIm"/> -->
    </beans>
  • 相关阅读:
    20201004 助教一周总结(第五周)
    20200906助教一周总结(第一周)
    如何在Linux下增加Apache的虚拟主机
    在Windows下编译OpenSSL
    Windows 应用
    祭5.12地震死难者文[转]
    VC++中控制控件台字体颜色(转)
    RSA算法简述
    如何解决在IE6下不自动换行的问题
    重庆旅游网新版上线,欢迎测试!
  • 原文地址:https://www.cnblogs.com/chenlizhi/p/7674657.html
Copyright © 2011-2022 走看看