Spring入门-----------------属性注入和对象注入
属性注入即通过setter方法注入bean的属性或依赖对象。
属性注入使用<property>元素,使用name属性指定bean的属性的名称,value属性或<value>子节点指定属性值。
原理:通过java的反射机制,调用此属性的setter方法。所以改属性必须有setter方法才能使用。
构造器注入:
通过构造方法注入bean的属性值或依赖的对象,它保证了bean实例在实例化后就可以使用。
构造器注入在<constructor-arg>初始化属性值,name属性表示通过参数名称设置属性。
构造器注入有两种方法:
- 按索引匹配入参
通过参数的顺序进行初始化
- 按类型匹配入参
通过方法的参数类型定位是用哪个构造方法
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入门-----------------属性注入和对象注入的更多相关文章
- 基于spring与mockito单元测试Mock对象注入
转载:http://www.blogjava.net/qileilove/archive/2014/03/07/410713.html 1.关键词 单元测试.spring.mockito 2.概述 单 ...
- Spring入门(九):运行时值注入
Spring提供了2种方式在运行时注入值: 属性占位符(Property placeholder) Spring表达式语言(SpEL) 1. 属性占位符 1.1 注入外部的值 1.1.1 使用Envi ...
- 【Spring Framework】Spring 入门教程(一)控制反转和依赖注入
参考资料 Spring 教程 说在前面 什么样的架构,我们认为是一个优秀的架构? 判断准则:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:在不断添加新的代码的同时,可以不修改原有代码,即符合 ...
- Spring:基于注解的依赖注入的使用
1.什么是pojo?什么是bean? 首先,在之前几篇Spring的介绍文章当中,自己都提到了一个名词叫做POJO类,但是在回顾Spring的注解的使用的时候,去形容java当中的对象还有一个名词是叫 ...
- spring入门-注解的使用
说明: 使用注解和使用配置文件实现的功能是一样的,都是为了解耦,但是配置文件语法属于非编程语言法语,无法调试,难以定位bug,使用注解更易定位问题. 配置步骤 编译器必须先安装了STS插件 第一步 导 ...
- Spring入门(4)-注入Bean属性
Spring入门(4)-注入Bean属性 本文介绍如何注入Bean属性,包括简单属性.引用.内部Bean.注入集合等. 0. 目录 注入简单值 注入引用 注入内部Bean 装配集合 装配空值 使用命名 ...
- spring学习——注入静态对象属性
spring注入静态对象属性时,因为虚拟机类加载问题,直接在属性上使用@Autowired 是不可以的.需要在属性对应的set方法上@Autowired,并且,set方法不能定义为static. 1. ...
- spring:为javabean的集合对象注入属性值
spring:为JavaBean的集合对象注入属性值 在 spring 中可以对List.Set.Map 等集合进行配置,不过根据集合类型的不同,需要使用不同的标签配置对应相应的集合. 1.创建 Ts ...
- spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
相关 知识 >>> 相关 练习 >>> 实现要求: 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出.要求如下: ...
随机推荐
- 2019.8.14 sdfzoier
zhaojinxi wxk: lixf zhangtingyu wu jialin zhangjinhao liuxinyang zhoukaixuan
- Spring Boot第五弹,WEB开发初了解~
持续原创输出,点击上方蓝字关注我吧 目录 前言 Spring Boot 版本 前提条件(必须注意) 添加依赖 第一个接口开发 如何自定义tomcat的端口? 如何自定义项目路径? JSON格式化 日期 ...
- 024 01 Android 零基础入门 01 Java基础语法 03 Java运算符 04 关系运算符
024 01 Android 零基础入门 01 Java基础语法 03 Java运算符 04 关系运算符 本文知识点:Java中的关系运算符 关系运算符
- C/C++ 中 exit() 函数
参考: https://blog.csdn.net/jjjcainiao/article/details/21935795 知乎上的问题]C/C++ 中 exit() 函数的参数到底有什么意义? C ...
- JavaScript判断字符串中出现次数最多的字符,并统计其次数
要求: 输出一个给定字符串``中出现次数最多的字符,并统计其次数. 实现思路: 利用charA()遍历这个字符串 把每个字符都存储给对象,如果对象没有该属性,就先幅值为1,如果存在了就+1 遍历对象, ...
- 你知道CPU结构也会影响Redis性能吗?
啦啦啦,我是卖身不卖艺的二哈,ε=(´ο`*)))唉错啦(我是开车的二哈),我又来了,铁子们一起开车呀! 今天来分析下CPU结构对Redis性能会有影响吗? 在进行Redis性能分析的时候,通常我们会 ...
- MongoDB单机部署
MongoDB单机部署 一.环境 系统:centos7.6 DB版本:mongodb-linux-x86_64-rhel62-4.2.1.tgz 官网地址:https://www.mongodb.co ...
- Python+Appium自动化测试(2)-appium连接真机启动app
app自动化测试的第一步,是启动被测app.appium环境搭建好后,我们就可以连接真机启动app了.环境为windows,Appium1.18.0,Android手机,被测app为今日头条app,让 ...
- 解决SpringBoot 定时计划 quartz job 任务重复执行多次(10次)
上一篇:SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源 设置了多个 任务,本应该是各司其职的,任务调用多线程处理任务,but这个定时任务竟然同时跑了10次???如 ...
- Docker Stack 笔记
Docker Compose (Docker Stack) image: Specify the image to start the container from. Can either be a ...