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类正在使用它的某些方法!去掉使用的方法就好了)
Spring 依赖注入(二、注入参数)的更多相关文章
- SpringBoot系列: 理解 Spring 的依赖注入(二)
==============================Spring 容器中 Bean 的名称==============================声明 bean 有两个方式, 一个是 @B ...
- 二十7天 春雨滋润着无形 —Spring依赖注入
6月11日,明确."夏条绿已密,朱萼缀明鲜.炎炎日正午,灼灼火俱燃." IT人习惯把详细的事物加工成的形状一致的类.正是这种一致,加上合适的规范.才干彰显对象筋道的牙感和bean清 ...
- spring学习(二)---依赖注入
spring第二个特性是依赖注入. 学习依赖注入,首先应该明白两个问题:1,谁依赖谁:2,谁注入,注入什么? 首先还是看代码: 还是这个bean: package testSpring.busines ...
- Spring核心技术(二)——Spring的依赖及其注入
本文将继续前文,描述Spring IoC中的依赖处理. 依赖 一般情况下企业应用不会只有一个对象(或者是Spring Bean).甚至最简单的应用都要多个对象来协同工作来让终端用户看到一个完整的应用的 ...
- Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入
本节主要内容: 1.实例化Spring容器示例 2.利用Spring容器创建JavaBean对象 3.如何控制Bean实例化 4.利用Spring实现bean属性sett ...
- Java Web系列:Spring依赖注入基础
一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...
- 为什么多线程、junit 中无法使用spring 依赖注入?
为什么多线程.junit 中无法使用spring 依赖注入? 这个问题,其实体现了,我们对spring已依赖太深,以至于不想自己写实例了. 那么到底是为什么在多线程和junit单元测试中不能使用依赖注 ...
- JAVA入门[3]—Spring依赖注入
Spring支持属性注入和构造器注入,它支持XML和注解两种方式.本文介绍Spring控制反转容器加载包含beans的XML文件,实现依赖注入. 一.创建bean实例 暂且抛开对象依赖,我们先看下如何 ...
- Spring 源码分析之 bean 依赖注入原理(注入属性)
最近在研究Spring bean 生命周期相关知识点以及源码,所以打算写一篇 Spring bean生命周期相关的文章,但是整理过程中发现涉及的点太多而且又很复杂,很难在一篇文章中把Spri ...
- Spring学习笔记二:注入方式
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6774608.html 我们说,IOC的实现方式是依赖注入,也就是把被依赖对象赋值到依赖对象的成员属性.怎么做 ...
随机推荐
- UVALive 4329 Ping pong (BIT)
枚举中间的人,只要知道在这个人前面的技能值比他小的人数和后面技能值比他小的人数就能计算方案数了,技能值大的可有小的推出. 因此可以利用树状数组,从左到右往树上插点,每个点询问sum(a[i]-1)就是 ...
- [学习笔记] C++ 历年试题解析(二)--程序题
发现程序题也挺有价值的. 顺便记录下来几道. 1.题目 #include <iostream> #include <cstring> using namespace ① std ...
- Asp.Net Core 进阶(四)—— 过滤器 Filters
一.介绍 Asp.Net Core Filter 使得可以在请求处理管道的特定阶段的前后执行代码,我们可以创建自定义的 filter 用于处理横切关注点. 横切关注点的示例包括错误处理.缓存.配置.授 ...
- 2018.4.27 Java的Swing常用事件
Swing常用事件 1.Java Swing中处理事件的一般步骤是: (1)新建一个组件(JButton) (2)将该组件添加到面板中(JPanel) (3)注册监听器以监听事件源产生的事件(如Act ...
- leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数
这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的 179. Largest Number a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_strin ...
- leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal,剑指offer 6 重建二叉树
不用迭代器的代码 class Solution { public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<in ...
- python面试笔试题汇总
Python面试攻略(嗨谈篇) 110道python面试笔试题汇总,你能答对几道? Python 面试问答 Top 25 2018 年最常见的 Python 面试题 & 答案
- Bootstrap历练实例:标签修饰
您可以使用修饰的 class label-default.label-primary.label-success.label-info.label-warning.label-danger 来改变标签 ...
- pandas实践——美国人口分析
1.导入文件,并查看数据样本 abbr = pd.read_csv("./state-abbrevs.csv")areas =pd.read_csv("./state-a ...
- 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
先上两张图: 查看TIME_WAIT和CLOSE_WAIT数的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a ...