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对象注入属性值并打印输出.要求如下: ...
随机推荐
- el-table行点击事件row-click与列按钮事件冲突
需求简述 表格用el-table实现,操作列的编辑按钮点击事件正常实现.现要为行加一点击事件,即row-click.加上后,发现点击操作列的编辑按钮时,会触发按钮本身事件,同时会触发行点击事件.第一版 ...
- linux与linux间,互相拷贝文件
直接使用scp命令 和远程Linux主机 进行文件的拷贝 1.可以将远程Linux系统上的文件拷贝到本地计算机 2.也可以将本地计算机上的文件拷贝到远程Linux系统上. 比如:我们要拷贝 ...
- PyCharm-缩进 格式化代码
格式化代码 Ctrl + Alt + l 缩进代码 Tab 向右缩进4格 Shift + Tab 向左缩进4格
- Centos-文本过滤-grep
grep 文本过滤,对文本的每一行进行关键字搜索,如果找到则输出 相关选项 -A 除了列出符合关键字的行外,还输出符合关键字行后多少行内容 -c 只显示符号条件的行号 -f 批量搜索,把关键字写入到 ...
- MDK内的KEEP关键字以及$$Base $$Limit
使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为vo ...
- 借助C++探究素数的分布
这里使用的区间是36,144,576,2304,9216,36864,147456,589824,2359296,9437184.至于这个区间是怎么得到的,感兴趣的同鞋可前往(https://www. ...
- 【题解】hdu4757 【TJOI2018】异或
题目链接 题目大意:有一颗树,有点权,每次询问:一条路径\(x->y\)中与\(z\)异或的最大值,或是以\(x\)为根的子树中与\(y\)异或的最大值. 树剖--还是算了. 观察到,子树的\( ...
- Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务
如何在离线环境或纯内网环境的Linux机器上安装部署Docker服务或其他服务.本次我们以Docker服务和Ansible服务为例. 获取指定服务的所有rpm包 保证要获取rpm包的机器能够上网. 本 ...
- Jenkins从节点上构建自动化测试项目时报错:java.io.IOException: Unexpected termination of the channel
在mac电脑上配置了Jenkins从节点,在该从节点上构建app UI 自动化测试项目,运行一些用例后报如下错误: java.io.EOFException at java.io.ObjectInpu ...
- 解决vue、js 下载图片浏览器默认预览而不是下载
在网页上,如果我们下载的地址对应的是一个jpg文件,txt文件等,点击链接时,浏览器默认的是打开这些文件而不是下载,那么如何才能实现默认下载呢? 后端解决 这就是Content-Disposition ...