用的是IDEA的maven工程,pom.xml文件导包依赖省略

本文主要写set方式注入

(一)、一般类型注入

一、写两个实体类Car、User

public class Car {
private String color;
private String carName; public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public String getCarName() {
return carName;
} public void setCarName(String carName) {
this.carName = carName;
} @Override
public String toString() {
return "Car{" +
"color='" + color + '\'' +
", carName='" + carName + '\'' +
'}';
}
}
public class User {
private String name;
private Integer age; private Car car; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Car getCar() {
return car;
} public void setCar(Car car) {
this.car = car;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", car=" + car +
'}';
}
}

二、书写配置文件applicationContext.xml(由于用的是IDEA,配置文件放在resources文件夹中),并注意约束的导入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!--set方式注入-->
<bean name="user" class="dyh.so.User">
<!--为User对象的name与age注入Lily和12-->
<property name="name" value="lily"></property>
<property name="age" value="12"></property>
<!--为car属性注入下面的car对象-->
<property name="car" ref="car"></property> </bean> <bean name="car" class="dyh.so.Car">
<!--为Car对象注入属性值-->
<property name="carName" value="兰博基尼"></property>
<property name="color" value="red"></property>
</bean>
</beans>

三、测试

import dyh.so.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; @Test
public void fun(){
//1、创建容器对象
ApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext.xml");
//2、向容器要User对象
User user = (User) ct.getBean("user");
//3、打印在容器中获得的对象
System.out.println(user);
}
}

测试结果:

(二)、复杂类型注入

一、写出要注入的实体类

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties; public class CollectionBean {
private List list;//list/set 类型注入
private Map map;//map类型注入
private Properties prop;//properties类型注入 public List getList() {
return list;
} public void setList(List list) {
this.list = list;
} public Map getMap() {
return map;
} public void setMap(Map map) {
this.map = map;
} public Properties getProp() {
return prop;
} public void setProp(Properties prop) {
this.prop = prop;
} @Override
public String toString() {
return "CollectionBean{" +
", list=" + list +
", map=" + map +
", prop=" + prop +
'}';
}
}

二、书写配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!--set方式注入-->
<bean name="user" class="dyh.so.User">
<!--为User对象的name与age注入Lily和12-->
<property name="name" value="lily"></property>
<property name="age" value="12"></property>
<!--为car属性注入下面的car对象-->
<property name="car" ref="car"></property> </bean> <bean name="car" class="dyh.so.Car">
<!--为Car对象注入属性值-->
<property name="carName" value="兰博基尼"></property>
<property name="color" value="red"></property>
</bean> <!--复杂类型注入--> <bean name="collbean" class="dyh.ss.CollectionBean">
<!--list 注入-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<ref bean="car"/>
<ref bean="user"/>
</list>
</property> <!--map注入-->
<property name="map">
<map>
<entry key="1" value="一"></entry>
<entry key="2" value="二"></entry>
<entry key="3" value="三"></entry>
<entry key-ref="user" value-ref="car"></entry>
</map>
</property> <!-- prperties 类型注入 -->
<property name="prop" >
<props>
<prop key="driverClass">com.jdbc.mysql.Driver</prop>
<prop key="userName">root</prop>
<prop key="password">1234</prop>
</props>
</property>
</bean>
</beans>

三、测试

 @Test
public void fun2(){
//创建容器
ApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext.xml");
//向容器中要ConnectionBean对象
Object collbean = ct.getBean("collbean"); //打印出来在spring中获得的对象
System.out.println(collbean);
}

测试结果

spring学习(三)属性注入的更多相关文章

  1. Spring 学习笔记 ----依赖注入

    依赖注入 有三种方式,本文只学习下属性注入. 属性注入       属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...

  2. 这篇文章,我们来谈一谈Spring中的属性注入

    本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...

  3. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  4. Spring学习笔记(二)——Spring相关配置&属性注入&Junit整合

    一.Spring的相关配置 1.1 Bean元素 class属性:被管理对象的完整类名 name属性:给Bean起个名字,能重复,能使用特殊字符.后来属性 id属性:给Bean起个名字,不能重复,不能 ...

  5. Spring学习(三)--高级装配

    一.Spring profile 在开发软件的时候,有一个很大的挑战就是将应用程序从一个环境迁 移到另外一个环境.开发阶段中,某些环境相关做法可能并不适合迁 移到生产环境中,甚至即便迁移过去也无法正常 ...

  6. Spring的三种注入方式(Setter、构造函数和自动注入)

    一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...

  7. spring学习之依赖注入DI与控制反转IOC

    一 Ioc基础 1.什么是Ioc? Ioc(Inversion of Control)既控制反转,Ioc不是一种技术,而是一种思想,在Java开发中意味着将设计好的对象交给容器来进行控制,并不是像传统 ...

  8. Spring IOC 三种注入方式

    1.    接口注入 2.    setter注入 3.    构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...

  9. Spring学习笔记--依赖注入

    依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...

  10. Spring框架的属性注入

    1. 对于类成员变量,常用的注入方式有两种 * 构造函数注入(没有空的构造方法注入) * 属性setter方法注入(有空的构造方法注入) 2. 在Spring框架中提供了前两种的属性注入的方式 1. ...

随机推荐

  1. 分词搜索 sphinx+php+mysql

    sphinx3.1.1的安装与使用 下载sphinx3.1.1 wget http://sphinxsearch.com/files/sphinx-3.1.1-612d99f-linux-amd64. ...

  2. SQL注入之sqlmap进阶

    上一篇我们对sqlmap进行简单的介绍,并介绍了一些·sqlmap的基础用法,这篇让我们来更深入的了解一下sqlmap,了解一下它的强大功能. 探测等级 参数为 --level 在sqlmap中一共有 ...

  3. day19__第三次作业

    一.break 与 continue 的区别 答:break 是结束全部循环,continue 是结束当前循环,开始进行下一循环 二.函数传递参数时,所用的内存地址一样吗? 答:一样 name = ' ...

  4. MongoDB快速入门教程 (4.4)

    4.5.Mongoose索引和方法 4.5.1.设置索引 let UserSchema = mongoose.Schema({ sn: { type: Number, // 设置唯一索引 unique ...

  5. C# 9.0 新特性之 Lambda 弃元参数

    阅读本文大概需要不到 1 分钟. 弃元(Discards) 是在 C# 7.0 的时候开始支持的,它是一种人为丢弃不使用的临时虚拟变量.语法上它是用来赋值的,但它却不被分配存储空间,即没有值,所以不能 ...

  6. 08 . Prometheus+Grafana监控haproxy+rabbitmq

    List CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz haproxy_exporter-0.11.0.linux-amd64.tar.gz 节点名 IP ...

  7. Python内置函数和内置常量

    Python内置函数 1.abs(x) 返回一个数的绝对值.实参可以是整数或浮点数.如果实参是一个复数,返回它的模. 2.all(iterable) 如果 iterable 的所有元素为真(或迭代器为 ...

  8. 安装完kali linux之后要做的10件事——113p.cn

    1.添加国内更新源(可能不是最好的) vim /etc/apt/source.list 科技大学# deb http://mirrors.ustc.edu.cn/kali sana main non- ...

  9. 一天学习一点之如何安装nodejs

    如果没有安装git,先使用命令apt-get install git,然后按以下步骤安装即可 Install the dependencies:sudo apt-get install g++ cur ...

  10. pycharm连接远程服务器(拉取版本)

    pycharm连接远程服务器(拉取版本) 有这篇教程是因为,博主有两个办公地点,想着在办公地点A上传代码到服务器并调试,并在B时候可以拉取这份代码,并进行调试.因此有这篇拉取版本的博客,之前还有上传版 ...