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之间的依赖关 ...
随机推荐
- stars-one原创工具——m3u8视频下载合并器(kotlin)
一款可以下载m3u8.解密ts文件及合并ts文件的视频下载工具 蓝奏云下载地址 github地址 软件对你有帮助的话,不妨赞赏一波!感谢! 程序说明 采用多线程下载,可有效的提高下载速度 内置解密程序 ...
- 【LC_Lesson1】--字符串反转练习
LeetCode算法练习题目一: 给定一个字符串,要求将该字符串反转后输出 努力学习,天天向上.借助LeetCode的题目,练习编码能力,数据结构,以及C++和Python的编码能力. 一. 算法实现 ...
- TCP/IP协议与HTTP协议(一)
1.什么是TCP/IP 如果要了解一个人,可以从他归属的集体聊起来.我们的HTTP协议就属于TCP/IP协议家族中的一员,了解HTTP协议再整个网络流程中的地位,也能更加充分的理解HTTP协议. 要 ...
- Nginx代理服务——常用的配置语法
可以到官方查看所有代理的配置语法http://nginx.org/en/docs/http/ngx_http_proxy_module.html 缓存区 Syntax:proxy_buffering ...
- 安全检测检查清单(Web)网站
(一) 检查项:弱锁定机制 优先级:高 检查要点:检查系统帐号锁定机制健壮性 检查方法: 1.尝试使用错误的密码登录5次,查看账户是否被锁定2.等待10分钟再次测试,确认该用户是否还处于锁定状态 (二 ...
- 一次jvm调优过程
jvm调优实战 前端时间把公司的一个分布式定时调度的系统弄上了容器云,部署在kubernetes,在容器运行的动不动就出现问题,特别容易jvm溢出,导致程序不可用,终端无法进入,日志一直在刷错误,ku ...
- 8.Java的特性和优势
简单性:可以说Java是C++语法的纯净版,没有头文件,没有指针运算,也不用分配内存. 面向对象:是一种程序设计技术,它将重点放在对象以及对象的接口上,模拟人的思维写程序,所以人去学习非常快.因此,J ...
- 基于python的感知机
一. 1.感知机可以描述为一个线性方程,用python的伪代码可表示为: sum(weight_i * x_i) + bias -> activation #activation表示激活函数,x ...
- py2 to py3
网络下载的python代码,版本参差,从python2.x迁移python3.x的过程中,存在print语法问题,即python2.x中print无括号,python3.x中print有括号. 逐行添 ...
- Bootstrap自带的那些常用插件
1.Bootstrap自带的那些常用插件. 1.1模态框 模态框的HTML代码放置的位置 务必将模态框的HTML代码放在文档的最高层级内(也就是说,尽量作为 body 标签的直接子元素),以避免其他组 ...