Spring属性注入的三种方式(超详细)
属性注入的三种方式
- 使用set方法进行注入
- 使用有参构造函数进行注入
- 使用p名称空间注入
首先了解下面两个名词的含义:
IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
DI:依赖注入(Dependency Injection,简称DI),就是注入属性。是Spring框架的核心之一。所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。
DI是IOC中的一种具体实现。
使用set方法进行注入
Book类:
package com.Keafmd.spring5;/*** Keafmd** @ClassName: Book* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-14 21:46*//*** 演示使用set方法进行注入属性*/
public class Book {//创建属性private String bname;private String bauthor;private String address;//1、set方法注入//创建对应的set方法public void setBname(String bname) {this.bname = bname;}public void setBauthor(String bauthor) {this.bauthor = bauthor;}public void setAddress(String address) {this.address = address;}public void testdemo(){System.out.println(bname+" "+bauthor+" "+address);}}
bean1.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 一、set方法注入属性--><!-- 1、配置对象的创建--><bean id="book" class="com.Keafmd.spring5.Book"><!-- 2、使用property完成属性注入name:类里面的属性名称value:向属性中注入的值--><property name="bname" value="书名"></property><property name="bauthor" value="作者"></property><!-- 向属性注入null值--><!--<property name="address" ><null/></property>--><!--属性值包含特殊符号1.把<>进行转义2.把带特殊符号的内容写到CDATA--><!-- <property name="address" value="<<北京>>"></property> --><property name="address"><value><![CDATA[<<北京>>]]></value></property></bean></beans>
测试代码:
package com.Keafmd.spring5.testdemo;import com.Keafmd.spring5.Book;
import com.Keafmd.spring5.Orders;
import com.Keafmd.spring5.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Keafmd** @ClassName: TestSpring5* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-14 20:06*/
public class TestSpring5 {@Testpublic void testBook(){//1、载Spring的配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");//2、获取配置文件中创建的对象 默认是执行无参的构造方法创建Book book =applicationContext.getBean("book", Book.class);book.testdemo();}}
输出结果:
书名 作者 <<北京>>Process finished with exit code 0
使用有参构造函数进行注入
Orders类:
package com.Keafmd.spring5;/*** Keafmd** @ClassName: Orders* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-14 22:05*//*** 使用有参构造注入*/
public class Orders {private String oname;private String address;public Orders(String oname, String address) {this.oname = oname;this.address = address;}public void ordersTest(){System.out.println(oname+" "+address);}
}
bean1.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--二、有参构造注入属性--><bean id="orders" class="com.Keafmd.spring5.Orders"><constructor-arg name="oname" value="电脑"/><constructor-arg name="address" value="China"/></bean></beans>
测试代码:
package com.Keafmd.spring5.testdemo;import com.Keafmd.spring5.Book;
import com.Keafmd.spring5.Orders;
import com.Keafmd.spring5.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Keafmd** @ClassName: TestSpring5* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-14 20:06*/
public class TestSpring5 {@Testpublic void testOrders(){//1、载Spring的配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");//2、获取配置文件中创建的对象 默认是执行无参的构造方法创建Orders orders =applicationContext.getBean("orders", Orders.class);orders.ordersTest();}
}
输出结果:
电脑 ChinaProcess finished with exit code 0
使用p名称空间注入
第一步:添加p名称空间xmlns:p="http://www.springframework.org/schema/p"
。
第二步:进行属性注入,在bean标签里。
Book类:
package com.Keafmd.spring5;/*** Keafmd** @ClassName: Book* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-14 21:46*//*** 演示使用p名称空间注入属性*/
public class Book {private String bname;private String bauthor;private String address;//3、p名称空间注入public void setBname(String bname) {this.bname = bname;}public void setBauthor(String bauthor) {this.bauthor = bauthor;}public void setAddress(String address) {this.address = address;}public void testdemo(){System.out.println(bname+" "+bauthor+" "+address);}}
bean1.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:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--三、p名称空间注入属性--><bean id="book" class="com.Keafmd.spring5.Book" p:bname="书名XXX" p:bauthor="作者XXX" p:address="地址XXX"></bean></beans>
测试代码:
package com.Keafmd.spring5.testdemo;import com.Keafmd.spring5.Book;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Keafmd** @ClassName: TestSpring5* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-14 20:06*/
public class TestSpring5 {@Testpublic void testBook(){//1、载Spring的配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");//2、获取配置文件中创建的对象 默认是执行无参的构造方法创建Book book =applicationContext.getBean("book", Book.class);book.testdemo();}}
输出结果:
书名XXX 作者XXX 地址XXXProcess finished with exit code 0
以上就是Spring属性注入的三种方式。
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
Keafmd
Spring属性注入的三种方式(超详细)相关推荐
- spring依赖注入的三种方式以及优缺点
spring依赖注入的三种方式以及优缺点 一.依赖注入的三种方式 1.通过构造器注入.(spring4.3之后,推荐使用) 2.通过setter注入.(spring4.3之前,推荐使用) 3通过fil ...
- Spring依赖注入的三种方式(好的 坏的和丑的)
关于spring bean三种注入方式的优缺点对比,翻译自Spring DI Patterns: The Good, The Bad, and The Ugly,水平有限,如有错误请指正. Sprin ...
- spring 依赖注入的三种方式
@Autowired:构造器,参数,方法,属性:都是从容器中获取参数组件的值: set方法注入: 构造器注入: 作为Bean方法的参数注入: 例子:Boss 注入Car类 第一种.set方式注入 // ...
- Spring注入的三种方式
Spring实例注入的三种方式: 1.属性注入,即使用注解注入. 2.set方法注入. 3.构造方法注入. 1.属性注入 使用@Autowired.@Resource或@Inject注解注入. 1.1 ...
- php依赖注入的三种方式
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency Inject ...
- Spring循环依赖的三种方式以及解决办法
Spring循环依赖的三种方式以及解决办法 [转]https://www.cnblogs.com/liuqing576598117/p/11227007.html 示例 https://github. ...
- 05.bean依赖注入的三种方式
05.bean依赖注入的三种方式 1.概述 依赖注入 DI(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现. 在编写程序时,通过控制反转,把对象的创建交给 ...
- spring依赖注入的4种方式
Spring 依赖注入的4种方式 一.Set注入 必须要有setter方法 public class UserDao {public void test(){System.out.println(&q ...
- Spring创建Bean的三种方式的使用和区别
在学习Spring的时候,发现Spring的IOC(控制反转)为我们提供的三种创建Bean的方式. 1.Spring创建Bean的三种方式 这里采用XML配置,分别演示三种创建Bean的方式和代码. ...
最新文章
- oracle存档模式,Oracle开启归档模式并设置RMAN自动备份策略
- 基于vue cli 3.0创建前端项目并安装cube-ui
- mysql表索引坏掉处理_一个mysql表索引被破坏的问题及解决
- 云通信产品运营带你玩转号码隐私保护
- plsql如何执行存储过程_如何理解Spark应用的执行过程
- WinCE 6.0中断驱动程序分析
- bzoj2461 [BeiJing2011]符环 dp
- Git学习文档之一 学习文档-合并分支
- ElasticSearch解决中文搜索只能搜索单个字符的问题
- linux查服务器硬件PN号,查看linux系统常用的命令,Linux查看系统配置常用命令
- QTP教程03 - 手工参数化
- 产品经理学习笔记-简约设计(1)
- novipnoad电影网站分析
- 数控弯管机xyz转换ybc的算法_全自动数控弯管机程序功能解析
- python数据分析实训报告总结_Python实训周总结(精品文档)
- windows如何远程桌面mac
- Android拍照识别身份证SDK
- 高精度轻量级图像分割SOTA模型PP-LiteSeg开源
- Pycharm安装.ignore
- IO模型-异步I/O模型
热门文章
- Android SDK Windows安装教程图解
- 圆形体癣是什么样子的图片_体癣图片
- android 4.4 batteryservice 电池电量显示分析
- 敏捷 Scrum 大师班认证培训的终极方案 | The Ultimate Agile Scrum Master Certification Training
- 考研复习之数据结构笔记(九)树(上)(树和二叉树的概念、特征、性质及相关实例)
- 朴素贝叶斯法及python实现
- 2022-2028年中国滚动轴承行业市场发展规模及投资机会分析报告
- 计算机电路英语词汇,PCB专业英语词汇对照表(大全)
- wifi无线网卡(zd1211b芯片)移植到mini2440全过程(一)
- win10高危服务_win10系统禁用Update Orchestrator Service服务的操作方法