Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean,注入集合,接口...
依赖注入分为三种方式:
1.1构造器注入
构造器通过构造方法实现,构造方法有无参数都可以。在大部分情况下我们都是通过类的构造器来创建对象,Spring也可以采用反射机制通过构造器完成注入,这就是构造器注入的原理。
代码清单:构造器注入
package com.spring.chapter3;
public class Role {
private long id;
private String roleName;
public Role(long id,String roleName){
this.id=id;
this.roleName=roleName;
}
public void getCount(){
System.out.println("Role已被调用"+"\n"+"id:"+id+"\n"+"roleName:"+roleName);
}
}
代码清单:构造器配置
<bean id="Role" class="com.spring.chapter3.Role">
<constructor-arg index="0" value="007"></constructor-arg>
<constructor-arg index="1" value="zhangqiang"></constructor-arg>
</bean>
元素名 |
作用 |
优缺点 |
constructor-arg |
元素用于定义类构造方法的参数 |
注入简单,不宜参数过多 |
index |
用于定义对应类构造方法的参数位置 |
|
value |
设置值 |
1.2使用setter注入
setter注入是Spring中最主流的注入方法(常用),好处就不用多说了。原理也是通过反射注入,直接上代码。(注意对应的实体类属性必须实现set,get方法。如果实体类没有属性也会被注入)。
package com.spring.chapter3;
public class Role {
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
private long id;
private String roleName;
}
Bean配置xml
<bean id="Role" class="com.spring.chapter3.Role">
</bean>
2.1 注入内部Bean
注入内部Bean跟setter注入是差不多的,不用多说直接看代码。
代码清单:内部Bean注入
package com.spring.chapter3;
public class Role {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleName() {
return RoleName;
}
public void setRoleName(String roleName) {
RoleName = roleName;
}
public DomePojo getDomePojo() {
return domePojo;
}
public void setDomePojo(DomePojo domePojo) {
this.domePojo = domePojo;
}
private DomePojo domePojo; //注意这里是类变量
private int id;
private String RoleName;
public void getCount(){
System.out.println("我是Role类的方法");
}
}
代码清单:内部 bean 为基于 setter 注入进行配置的配置文件 Spring.xml 文件:
<bean id="DomePojo" class="com.spring.chapter3.DomePojo">
</bean>
<bean id="Role" class="com.spring.chapter3.Role">
<property name="id" value="007"></property>
<property name="RoleName" value="zhangqiang"></property>
<property name="DomePojo" ref="DomePojo"></property>
</bean>
property name对应pojo中的属性(类变量),ref关联到对应Bean的id (注意:ref关联的Bean一定要在Spring Ioc容器中定义,否则会报错)
2.2 注入集合
如果想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:
| 元素 | 描述 |
|---|---|
| <list> | 它有助于连线,如注入一列值,允许重复。 |
| <set> | 它有助于连线一组值,但不能重复。 |
| <map> | 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。 |
| <props> | 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。 |
代码清单:Pojo实体类(注意必须setter方法)
package com.spring.chapter4; import java.util.List;
import java.util.Set; public class Collection {
public Set getAddSet() {
return addSet;
} public void setAddSet(Set addSet) {
this.addSet = addSet;
} public List getAddList() {
return addList;
} public void setAddList(List addList) {
this.addList = addList;
} private Set addSet;
private List addList; public void getCount(){
System.out.println("我是Role类的方法");
}
}
代码清单:Bean配置
<bean id="Collection" class="com.spring.chapter4.Collection">
<property name="addList">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
</list>
</property>
<property name="addSet">
<set>
<value>6</value>
<value>7</value>
<value>8</value>
<value>9</value>
</set>
</property>
</bean>
测试结果:

Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean,注入集合,接口...的更多相关文章
- struts2和spring的两种整合方式
首先,来看看如何让Spring 来管理Action. 在struts.xml中加入 <constant name="struts.objectFactory" value=& ...
- spring security四种实现方式
spring security四种实现方式 spring(20) > 目录(?)[+] 最简单配置spring-securityxml实现1 实现UserDetailsService 实现动态过 ...
- struts2+spring的两种整合方式
也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...
- Spring AOP四种实现方式Demo详解与相关知识探究
一.前言 在网络上看到一篇博客Spring实现AOP的4种方式,博主写的很通俗易懂,但排版实在抓狂,对于我这么一个对排版.代码格式有强迫症的人来说,实在是不能忍受~~~~(>_<)~~~~ ...
- Spring AOP两种实现方式
一. AOP 概念: Spring AOP 即Aspect Oriented Programming(面向切面编程), 实现方式分为两种: 1. 注解(Annotation) 2. 配置(Config ...
- Spring事务-三种实现方式
一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对 ...
- 大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法
具体见第三阶段scala-day01中的文档(scala编程基础---基础语法) 1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html): ...
- Java开发学习(六)----DI依赖注入之setter及构造器注入解析
一.DI依赖注入 首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法) 构造方法 依赖注入描述了在容器中建立bean与bean之间的依赖关 ...
随机推荐
- git与github的简单使用教程
git与github的简单使用教程 一.创建仓库 点击new,进入创建仓库页面 对将要创建的仓库进行一些简单的设置 最后再点击create repository就可以了. 到这我们就创建好了一个仓库. ...
- Jenkins Pipeline Job构建配置
1.创建pipeline job任务,新建任务>输入任务名称>选择“流水线”>点击[确定] 添加描述,This is my first test pipelin ...
- 图像矫正技术深入探讨(opencv)
刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正.哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧! 那什么是图像的矫正呢?举个例子就好明白了. 我的好朋友小明给我拍了这几张 ...
- 微软的github 上面 有 Docker.DotNet 嗯 作为 菜 只有欣赏的额
.NET Client for Docker Remote API step one 需要下载的 猛戳 Docker.DotNet
- 总是在起头可是能怎么办呢 Python数据分析
目录 前言1 第1章准备工作5 本书主要内容5 为什么要使用Python进行数据分析6 重要的Python库7 安装和设置10 社区和研讨会16 使用本书16 致谢18 第2章引言20 来自bit.l ...
- Ubuntu下cc和gcc的关系
在编写makefile时找到过很多例子,其中有一些用的bash是cc,而有的则是gcc,然后就去查阅了一些相关资料.原来cc是Unix下的c编译器,而gcc则是Linux下的编译器.那么问题来了,在L ...
- Jmeter使用—使用 HTTP代理服务器抓取接口
这里说一下怎么使用jmeter的HTTP代理服务器来抓取接口. 首先,打开jmeter,进入主页面,然后在对工作台(Jmeter版本4.0)点击右键->添加->非测试元件->HTTP ...
- SpringBoot初级知识总结,太难了,未完待续.......
idea如何打包发布springboot 1.1.环境准备window系统,jdk8环境,springboot项目,maven3.5.4环境 1.2.进行打包发布 打开idea编辑器,打开一个写好的d ...
- AI初探
看东西应该记笔记,不然如过眼云烟,如只逛商场,不买东西,不留下带走什么,就是浪费时间,没有收获,仅此开始,定期梳理看过的东西. 人工智能的目的是什么呢? 答:让机器表现得更像人类,甚至在某些技能上超越 ...
- 数据结构与算法 --- js二分算法
var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87]; //递归方式 function binarySearch(data,dest,start,end ){ ...