zoukankan      html  css  js  c++  java
  • Spring 依赖注入(二、注入参数)

    注入参数基本分7类:

    1.基本类型值

    2.注入bean

    3.内部bean

    4.注入null值

    5.级联属性

    6.List,Set,Map集合的注入

    7.properties文件的注入(和集合注入基本是一样的)

    下面就是实体类People2,beans.xml的源码

    复制代码
    package com.maya.model;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    public class People2 {
        private int id;
        private String name;
        private int age;
        private Dog dog;//注入bean
        private List<String> myList=new ArrayList<String>();//List集合注入    
        private Set<String> mySet=new HashSet<String>();//Set集合注入
        private Map<String,String> myMap=new HashMap<String,String>();//Map集合注入
        private Properties jdbc=new Properties();//properties文件注入,和map差不多都是以key、value的形式
        public Map<String, String> getMyMap() {
            return myMap;
        }
        public void setMyMap(Map<String, String> myMap) {
            this.myMap = myMap;
        }
        public Set<String> getMySet() {
            return mySet;
        }
        public void setMySet(Set<String> mySet) {
            this.mySet = mySet;
        }
        public List<String> getMyList() {
            return myList;
        }
        public void setMyList(List<String> myList) {
            this.myList = myList;
        }
        public Dog getDog() {
            return dog;
        }
        public void setDog(Dog dog) {
            this.dog = dog;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        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 People2() {
            super();
        }
        public People2(int id, String name, int age, Dog dog) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
            this.dog = dog;
        }
        
        public Properties getJdbc() {
            return jdbc;
        }
        public void setJdbc(Properties jdbc) {
            this.jdbc = jdbc;
        }
        
        @Override
        public String toString() {
            return "People2 [id=" + id + ", name=" + name + ", age=" + age + ", dog=" + dog + ", myList=" + myList
                    + ", mySet=" + mySet + ", myMap=" + myMap + ", jdbc=" + jdbc + "]";
        }
        //当要使用dog.name是就要注意beans.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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
          
          <!-- 注入参数 -->
          <!-- 基本类型注入 -->
          <bean id="people21" class="com.maya.model.People2">
              <constructor-arg name="id" value="0"></constructor-arg>
              <constructor-arg name="name" value="张三"></constructor-arg>
              <constructor-arg name="age" value="10"></constructor-arg>
              <constructor-arg name="dog" ref="dog1"></constructor-arg>
          </bean>
          
          <!-- 注入bean -->
          <bean id="dog1" class="com.maya.model.Dog">
              <property name="name" value="阿黄"></property>
          </bean>
          
          <bean id="people22" class="com.maya.model.People2">
              <property name="id" value="1"></property>
            <property name="name" value="小明2"></property>
            <property name="age" value="22"></property>
              <property name="dog" ref="dog1"></property><!-- 注入bean时ref是要注入的bean的id -->
          </bean>
          
          <!-- 注入内部bean -->
          <bean id="people23" class="com.maya.model.People2">
              <property name="id" value="3"></property>
            <property name="name" value="小明3"></property>
            <property name="age" value="33"></property>
              <property name="dog">
                  <bean class="com.maya.model.Dog">
                      <property name="name" value="UZI"></property><!-- 分开写而已 -->
                  </bean>
              </property>
          </bean>
          
          <!-- 注入null -->
          <bean id="people24" class="com.maya.model.People2">
              <property name="id" value="3"></property>
            <property name="name" value="小明3"></property>
            <property name="age" value="33"></property>
              <property name="dog">
                  <null></null><!-- 给dog属性注入一个null -->
              </property>
          </bean>
          
          <!-- 级联方式注入 -->
          <!-- <bean id="people25" class="com.maya.model.People2">
              <property name="id" value="3"></property>
            <property name="name" value="小明3"></property>
            <property name="age" value="33"></property>
              <property name="dog.name" value="小明的狗"></property>
              注意:以这种方式进行赋值时,因为我们没用注入Dog的实例对象,所以我们要在People2的dog属性后new一个Dog实例!这样才能成功赋值
          </bean> -->
          
          <!-- 注入List集合,Set集合,Map集合 -->
          <bean id="people26" class="com.maya.model.People2">
              <property name="id" value="3"></property>
            <property name="name" value="小明3"></property>
            <property name="age" value="33"></property>
              <property name="dog" ref="dog1"></property>
              <!-- List集合 -->
              <property name="myList">
                  <list>
                      <value>a</value>
                      <value>b</value>
                      <value>c</value>
                      <value>d</value>
                  </list>
              </property>
              <!-- Set集合,Set集合是自动去掉重复值得!所以输出的结果还是a,b,c -->
              <property name="mySet">
                  <set>
                      <value>a</value>
                      <value>b</value>
                      <value>c</value>
                      <value>c</value>
                      <value>b</value>
                      <value>a</value>
                  </set>
              </property>    
              <!-- Map集合 -->
              <property name="myMap">
                  <map>
                      <entry>
                          <key><value>上午</value></key>
                          <value>写代码</value>
                      </entry>
                      <entry>
                          <key><value>下午</value></key>
                          <value>测试代码</value>
                      </entry>
                  </map>
              </property>
              <!-- 配置properties文件 -->
              <property name="jdbc">
                <props>
                      <prop key="qd">com.mysql.jdbc.Driver</prop>
                      <prop key="url">jdbc:mysql://localhost:3306/spring4?characterEncoding=GBK</prop>
                      <prop key="user">root</prop>
                  </props>
            </property>
          </bean>
          
          <!-- 配置properties文件 -->
          <bean id="people27" class="com.maya.model.People2">
          <!-- 在这之前没有为其他属性赋值,这是可以得。但是当使用其引用bean的某些方法时就必须给其赋值而且不能是null -->
            <property name="jdbc">
                <props>
                      <prop key="qd">com.mysql.jdbc.Driver</prop>
                      <prop key="url">jdbc:mysql://localhost:3306/spring4?characterEncoding=GBK</prop>
                      <prop key="user">root</prop>
                  </props>
            </property>
          </bean>          
    </beans>
    复制代码

     常见错误:

    Could not resolve matching constructor(构造函数问题)

    Loading XML bean definitions from class path resource(实体类中 引用的其他bean类正在使用它的某些方法!去掉使用的方法就好了)

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/claricre/p/6636793.html
Copyright © 2011-2022 走看看