属性注入即通过setter方法注入bean的属性或依赖对象。

属性注入使用<property>元素,使用name属性指定bean的属性的名称,value属性或<value>子节点指定属性值。

原理:通过java的反射机制,调用此属性的setter方法。所以改属性必须有setter方法才能使用。

构造器注入:

通过构造方法注入bean的属性值或依赖的对象,它保证了bean实例在实例化后就可以使用。

构造器注入在<constructor-arg>初始化属性值,name属性表示通过参数名称设置属性。

构造器注入有两种方法:

  1. 按索引匹配入参

通过参数的顺序进行初始化

  1. 按类型匹配入参

通过方法的参数类型定位是用哪个构造方法

1.创建一个Student类

package com.xt.spring.student;

public class Student {

    private String stuNo;
private String stuName;
public School school;
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
public Student(String stuNo,String stuName){
this.stuNo=stuNo;
this.stuName=stuName;
}
public Student(){ }
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
@Override
public String toString() {
return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", school=" + school + "]";
}
}

新建一个school类,作为引用对象

package com.xt.spring.student;

public class School {
private String address;
private String detail;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
@Override
public String toString() {
return "School [address=" + address + ", detail=" + detail + "]";
} }

2.创建配置文件applicationContext-stu.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd ">

<!--
   DI:依赖注入
javabean通过标签property向实体中的属性注入值。属性必须有setter方法,不然会有异常。
原理:通过java的反射机制,调用此属性的setter方法
通过构造方法实例化bean对象,并初始化属性值:
通过标签constructor-arg 初始化属性值,name属性表示通过参数名称设置属性
  <bean id="stu" class="com.xt.spring.student.Student">
  <constructor-arg type="java.lang.String" value="20162430730"></constructor-arg>
  <constructor-arg type="java.lang.String" value="杨贺龙"></constructor-arg>
  </bean>
     痛过设置参数的书序进行初始化,属性index表示参数顺序

<bean id="stu" class="spring.ioc.test.stu.Student">
          <constructor-arg value="20162430730" index="0"></constructor-arg>
          <constructor-arg value="杨贺龙" index="1"></constructor-arg>
          </bean>

      通过方法的参数类型定位使用哪个构造方法
<constructor-arg type="java.lang.String" value="杨贺龙"></constructor-arg>
向javabean属性注入一个引用:
通过bean标签的子标签property标签向javabean属性注入一个引用,
属性name表示bean的属性名称,ref表示注入的引用bean Name或者bean ID; 在使用<property>标签向bean中注入值时,如果注入的值包含特殊符号需要使用<![CDATA[值]]以 value标签的形式注入。
引用对象时使用ref属性,对应取值为引用对象的id
-->

<bean id="school" class="com.xt.spring.student.School">
<property name="address" value="郑州大学"></property>
<property name="detail" value="信息工程学院"></property>
</bean>

<bean id="stu" class="com.xt.spring.student.Student">

<property name="stuNo" value="20162430730"></property>

<property name="stuName" value="杨贺龙"></property>

<property name="school" ref="school"></property>

</bean>

</beans>

3.pom.xml文件与上个博客中的相同

4.实现类

package com.xt.spring.student;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class IOCTest {
private ApplicationContext ioc;
@Before
public void Init(){
ioc = new ClassPathXmlApplicationContext("Spring/ApplicationContext-stu.xml");
}
@Test
public void Test(){
Student stu = ioc.getBean("stu",Student.class);
System.out.println("==========="+stu);
}
}

Spring入门-----------------属性注入和对象注入的更多相关文章

  1. 基于spring与mockito单元测试Mock对象注入

    转载:http://www.blogjava.net/qileilove/archive/2014/03/07/410713.html 1.关键词 单元测试.spring.mockito 2.概述 单 ...

  2. Spring入门(九):运行时值注入

    Spring提供了2种方式在运行时注入值: 属性占位符(Property placeholder) Spring表达式语言(SpEL) 1. 属性占位符 1.1 注入外部的值 1.1.1 使用Envi ...

  3. 【Spring Framework】Spring 入门教程(一)控制反转和依赖注入

    参考资料 Spring 教程 说在前面 什么样的架构,我们认为是一个优秀的架构? 判断准则:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:在不断添加新的代码的同时,可以不修改原有代码,即符合 ...

  4. Spring:基于注解的依赖注入的使用

    1.什么是pojo?什么是bean? 首先,在之前几篇Spring的介绍文章当中,自己都提到了一个名词叫做POJO类,但是在回顾Spring的注解的使用的时候,去形容java当中的对象还有一个名词是叫 ...

  5. spring入门-注解的使用

    说明: 使用注解和使用配置文件实现的功能是一样的,都是为了解耦,但是配置文件语法属于非编程语言法语,无法调试,难以定位bug,使用注解更易定位问题. 配置步骤 编译器必须先安装了STS插件 第一步 导 ...

  6. Spring入门(4)-注入Bean属性

    Spring入门(4)-注入Bean属性 本文介绍如何注入Bean属性,包括简单属性.引用.内部Bean.注入集合等. 0. 目录 注入简单值 注入引用 注入内部Bean 装配集合 装配空值 使用命名 ...

  7. spring学习——注入静态对象属性

    spring注入静态对象属性时,因为虚拟机类加载问题,直接在属性上使用@Autowired 是不可以的.需要在属性对应的set方法上@Autowired,并且,set方法不能定义为static. 1. ...

  8. spring:为javabean的集合对象注入属性值

    spring:为JavaBean的集合对象注入属性值 在 spring 中可以对List.Set.Map 等集合进行配置,不过根据集合类型的不同,需要使用不同的标签配置对应相应的集合. 1.创建 Ts ...

  9. spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。

    相关 知识 >>> 相关 练习 >>> 实现要求: 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出.要求如下: ...

随机推荐

  1. 一道无限极类 PHP 试题

    记某次笔试碰到的一道无限极类试题,当时时间比较紧(满满六页试题),还是手写代码,所以最终写的有点错误.记不住原题了,但是要求都知道,特此记录下来! 试题 有下面一个数组: $arr = [ '小红' ...

  2. MySQL: 1、MySQL基础

    一.数据库基本概念 1.什么是数据库? 数据就是存储和管理数据库的仓库,本质上是一个文件系统,以文件的方式将数据保存再电脑上 2.为什么使用数据库? 使用数据库存储数据用户可以方便的对数据库中的数据进 ...

  3. zabbix安装要求

    zabbix server 和 zabbix Agent都在一个压缩包中,可以从官网上下载源码包,www.zabbix.com/download.php zabbix是C语言编写,压缩包的文件夹介绍: ...

  4. mysql-5-aggregation

    #2.分组函数 /* 分组函数/聚合函数:传入一组值,经过统计处理,得到一个输出值 sum, avg, max, min, count */ USE myemployees; #简单使用 SELECT ...

  5. matlab中upper 将字符串转换为大写

    参考:https://ww2.mathworks.cn/help/matlab/ref/fprintf.html?searchHighlight=fprintf&s_tid=doc_srcht ...

  6. 【题解】SP1812 【LCS2 - Longest Common Substring II 】

    \(\text{Suffix Tree:}\)我来啦我来啦 \(\text{Solution:}\) 题目要求求好几个串串的\(\text{LCS.}\) 由于串串的数量并不多,所以我们把它们塞到一个 ...

  7. Tensorflow学习笔记No.5

    tf.data卷积神经网络综合应用实例 使用tf.data建立自己的数据集,并使用CNN卷积神经网络实现对卫星图像的二分类问题. 数据下载链接:https://pan.baidu.com/s/141z ...

  8. Linux nginx 安装 启动

    nginx下载地址:https://nginx.org/download/ ## 解压 tar -zxvf nginx-1.9.9.tar.gz ##进入nginx目录 cd nginx-1.9.9 ...

  9. 用网桥和veth实现容器的桥接模式

    原理图如下 具体命令先不写了,有时间再写,主要还是用的上一篇说的知识.

  10. 多测师讲解jmeter _图片详解_(全)高级讲师肖sir