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类正在使用它的某些方法!去掉使用的方法就好了)

  • 相关阅读:
    eclipse 粘贴字符串自动添加转义符
    原创 导出微信收藏到电脑
    解决 eclipse中properties文件编码问题
    jetty 内嵌服务
    解决log4j:WARN No appenders could be found for logger
    解决JettyMavenPlugin: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
    读取properties文件方式
    解决ssh远程登陆linux显示-bash-4.1$
    解决weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection
    解决java.io.IOException: HTTPS hostname wrong: should be
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6612461.html
Copyright © 2011-2022 走看看