属性注入即通过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. 2019.8.14 sdfzoier

    zhaojinxi wxk: lixf zhangtingyu wu jialin zhangjinhao liuxinyang zhoukaixuan

  2. Spring Boot第五弹,WEB开发初了解~

    持续原创输出,点击上方蓝字关注我吧 目录 前言 Spring Boot 版本 前提条件(必须注意) 添加依赖 第一个接口开发 如何自定义tomcat的端口? 如何自定义项目路径? JSON格式化 日期 ...

  3. 024 01 Android 零基础入门 01 Java基础语法 03 Java运算符 04 关系运算符

    024 01 Android 零基础入门 01 Java基础语法 03 Java运算符 04 关系运算符 本文知识点:Java中的关系运算符 关系运算符

  4. C/C++ 中 exit() 函数

    参考: https://blog.csdn.net/jjjcainiao/article/details/21935795 知乎上的问题]C/C++ 中 exit() 函数的参数到底有什么意义? C ...

  5. JavaScript判断字符串中出现次数最多的字符,并统计其次数

    要求: 输出一个给定字符串``中出现次数最多的字符,并统计其次数. 实现思路: 利用charA()遍历这个字符串 把每个字符都存储给对象,如果对象没有该属性,就先幅值为1,如果存在了就+1 遍历对象, ...

  6. 你知道CPU结构也会影响Redis性能吗?

    啦啦啦,我是卖身不卖艺的二哈,ε=(´ο`*)))唉错啦(我是开车的二哈),我又来了,铁子们一起开车呀! 今天来分析下CPU结构对Redis性能会有影响吗? 在进行Redis性能分析的时候,通常我们会 ...

  7. MongoDB单机部署

    MongoDB单机部署 一.环境 系统:centos7.6 DB版本:mongodb-linux-x86_64-rhel62-4.2.1.tgz 官网地址:https://www.mongodb.co ...

  8. Python+Appium自动化测试(2)-appium连接真机启动app

    app自动化测试的第一步,是启动被测app.appium环境搭建好后,我们就可以连接真机启动app了.环境为windows,Appium1.18.0,Android手机,被测app为今日头条app,让 ...

  9. 解决SpringBoot 定时计划 quartz job 任务重复执行多次(10次)

    上一篇:SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源 设置了多个 任务,本应该是各司其职的,任务调用多线程处理任务,but这个定时任务竟然同时跑了10次???如 ...

  10. Docker Stack 笔记

    Docker Compose (Docker Stack) image: Specify the image to start the container from. Can either be a ...