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

时间: 2024-10-13 01:27:18

Spring 依赖注入(二、注入参数)的相关文章

Spring基础学习(二)&mdash;注入参数详解

     在Spring配置文件中,用户不但可以将String.int等字面值注入Bean中,还可以将集合.Map等类型注入Bean中,此外还可以注入配置文件中其他定义的Bean. 一.字面值      (1)可用字符串表示的值,可以通过<value>元素标签或value属性进行注入.      (2)基本数据类型及其封装类.Stting类型都可以采用字面值注入的方式.      (3)若字面值包含特殊字符,可以使用<![CDATA[]]>把字面值包裹起来. <bean id

SpringBoot系列: 理解 Spring 的依赖注入(二)

==============================Spring 容器中 Bean 的名称==============================声明 bean 有两个方式, 一个是 @Bean, 另一个是 @Component 和它的子类 (包括 @Service/@Controller/@Repository/@Configuration), Spring 容器中 bean 名生成规则分两大类, 分别是: 一. @Component 和它的子注解是用来注解 Class 的. 这些

Spring核心技术(二)——Spring的依赖及其注入

本文将继续前文,描述Spring IoC中的依赖处理. 依赖 一般情况下企业应用不会只有一个对象(或者是Spring Bean).甚至最简单的应用都要多个对象来协同工作来让终端用户看到一个完整的应用的.下一部分将解释开发者如何从仅仅定义单独的Bean,到让这些Bean在一个应用中协同工作. 依赖注入 依赖注入是一个让对象只通过构造参数,工厂方法的参数或者配置的属性来定义他们的依赖的过程.这些依赖也是对象所需要协同工作的对象.容器会在创建Bean的时候注入这些依赖.整个过程完全反转了由Bean自己

spring学习(二)---依赖注入

spring第二个特性是依赖注入. 学习依赖注入,首先应该明白两个问题:1,谁依赖谁:2,谁注入,注入什么? 首先还是看代码: 还是这个bean: package testSpring.business.bean; import org.springframework.stereotype.Repository; import testSpring.business.iface.IPrint; /** * UserBean : * @author xuejupo [email protected

Spring笔记(二):Ioc 之注入与装配

一.Spring依赖注入的原理 二.依赖注入的实现 (一)对象的注入 1.简单属性注入 1)源代码 package main.java.com.spring.ioc.base.dao.impl; import main.java.com.spring.ioc.base.dao.PersonDao; /** * * PersonDiDaoImpl * @title * @desc * @author SAM-SHO * @Dec 28, 2014 */ public class PersonDiD

Spring依赖注入

Spring依赖注入基础 一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是可以专注业务逻辑.因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大.Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下: (1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AO

Spring学习(二)spring ioc注入的三种方式

一.spring ioc注入有哪三种方式: a setter 原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法:"让ioc容器调用该setter方法",将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中. b 构造器 原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数.ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值:将ioc实例化的依赖对象作为构造器的参数传入

JAVA入门[3]—Spring依赖注入

Spring支持属性注入和构造器注入,它支持XML和注解两种方式.本文介绍Spring控制反转容器加载包含beans的XML文件,实现依赖注入. 一.创建bean实例 暂且抛开对象依赖,我们先看下如何通过Spring容器创建bean实例.这里要用到Spring的控制反转容器ApplicationContext,它的getBean方法可以创建bean实例 1.在Maven项目的pom.xml添加spring依赖项. <dependencies> <!-- mybatis核心包 -->

(转)Java Web系列:Spring依赖注入基础

一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是可以专注业务逻辑.因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大.Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下: (1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AOP分离关注点,减少重复代码

Spring属性注入、构造方法注入、工厂注入以及注入参数(转)

Spring 是一个开源框架. Spring 为简化企业级应用开发而生(对比EJB2.0来说). 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.Spring 是一个 IOC(DI) 和 AOP 容器框架. 具体描述 Spring:轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API控制反转(依赖注入) (IOC----inverse of control .DI --- dependenc