spring——依赖注入的三种方式
1 构造器注入(与构造器有直接关系)
默认无参构造
3种构造方式:通过
<contructor-arg>调用类中的构造器下标
<bean id="userService" class="com.guan.service.UserServiceImpl">
<constructor-arg index="0" ref="apple"></constructor-arg>
</bean>
类型
<bean id="userService" class="com.guan.service.UserServiceImpl">
<constructor-arg type="com.guan.dao.Fruit" ref="apple"></constructor-arg>
</bean>
参数名(推荐使用)
<bean id="userService" class="com.guan.service.UserServiceImpl">
<constructor-arg name="fruit" ref="apple"></constructor-arg>
</bean>
总结:
(1).所有实例在配置文件加载时完成初始化
(2).一个类在一个容器中只有一个实例(默认是单例模式)
2 set注入(重点,与set方法有直接关系)
依赖注入的概念:
- 依赖: bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器注入
测试环境搭建
public class Teacher {
private String name;
private int age;
}
```java
public class Student {
private String name;
private Teacher teacher;
private int age;
private String wife;
private Properties info;
private List<String> bookList;
private String[] friends;
private Set<String> things;//compared to list collection,the item of set can't be repeat.
private Map<String,Object> eductationHistory;
}
几个集合的区别:
(1).list和数组:list是动态伸缩的,而数组不是
(2).list和set:set不能重复,list可以重复
使用配置文件进行配置
<bean id="teacher" class="com.guan.bean.Teacher">
<property name="name" value="蔡老师"></property>
<property name="age" value="5"></property>
</bean> <bean id="student" class="com.guan.bean.Student"> <property name="name" value="小明"></property>
<!-- 1.class-->
<property name="teacher" ref="teacher"></property> <property name="age" value="23"></property>
<!-- 2.null-->
<property name="wife"><null></null></property>
<!-- 3.properties-->
<property name="info">
<props>
<prop key="喜欢的歌手">许嵩</prop>
<prop key="可能喜欢的事">写代码</prop>
</props>
</property>
<!-- 4.List-->
<property name="bookList">
<list>
<value>飘</value>
<value>百年孤独(最近在看)</value>
</list>
</property>
<!-- 5.array-->
<property name="friends">
<array>
<value>小王</value>
<value>小红</value>
<value>小火</value>
</array>
</property>
<!-- 6.set-->
<property name="things">
<set>
<value>敲代码</value>
<value>敲代码</value>
<value>敲代码</value>
</set>
</property>
<!-- 7.Map-->
<property name="eductationHistory">
<map>
<entry key="小学" value="五里屯"></entry>
<entry key="初中" value="张家口"></entry>
<entry key="高中" value="三门星"></entry>
</map>
</property>
</bean>
注意:
(1).空值是通过标签
<null/>(2).properties是通过标签
<props/>和<prop>组合在一起配置的(3),map的value值写在
<entry>标签间
3 其他方式
- p命名空间(property):可以直接在
<bean>的像id一样赋值(通过set方法) - c命名空间(construct):同上,只是使用的函数方式不同(通过construct方法)
注意:需要先导入命名空间
4 bean的作用域
单例模式(singletion):每次取得的都是同一个实例,一般用于单线程(默认)
<bean id="teacher" class="com.guan.bean.Teacher" scope="singleton">
<property name="name" value="蔡老师"></property>
<property name="age" value="5"></property>
</bean>
原型模式(prototype):每次get都会取得不同的实例,一般用于多线程
<bean id="teacher" class="com.guan.bean.Teacher" scope="prototype">
<property name="name" value="蔡老师"></property>
<property name="age" value="5"></property>
</bean>
其余的request,session,application只能在web开发中使用
spring——依赖注入的三种方式的更多相关文章
- Spring依赖注入的三种方式
看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...
- SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式
在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...
- Spring基础05——Spring依赖注入的三种方式
Spring支持3种依赖注入的方式:属性注入.构造器注入.工厂 1.属性注入 属性注入即通过setter方法注入Bean的属性或依赖的对象.使用<property>元素,使用name属性指 ...
- Spring静态注入的三种方式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- Spring注解依赖注入的三种方式的优缺点以及优先选择
当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 三种方式的区别小结 ...
- spring4之依赖注入的三种方式
1.Setter注入 <bean id="helloWorld" class="com.jdw.spring.beans.HelloWorld"> ...
- spring 依赖注入的3种方式
在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来:另一类则是依赖注入,而Spring主要使用的是依赖注入.一般而言,依赖注入可以分为3种方式 ...
随机推荐
- 替小白整理的 linux基操命令 切勿扣6 不用感谢
Linux --------小白必会的基本命令 命令行提示字符[root@localhost ~]#[当前登录系统的用户@主机名称 当前所在的目录]## 表示为管理员登录$ 表示为普通用户登录 切 ...
- 巧用python进行接口自动化测试
一.接口自动化测试的流程 1.需求分析 1.1请求(url,方法.数据) 2.挑选需要做自动化测试的接口 3.设计自动化测试用例 4.搭建自动化测试环境 5.设计自动化执行框架(报告.参数化. 用例执 ...
- Java四舍五入保留n位小数的常用写法
1. 使用BigDecimal double v = 1.233; double res = new BigDecimal(v).setScale(2, RoundingMode.HALF_UP).d ...
- 聚类算法在 D2C 布局中的应用
1.摘要 聚类是统计数据分析的一门技术,在许多领域受到广泛的应用,包括机器学习.数据挖掘.图像分析等等.聚类就是把相似的对象分成不同的组别或者更多的子集,从而让每个子集的成员对象都有相似的一些属性. ...
- python-jsonpath模块
前言 当遇到层级比较深的字典时,要想取值使用jsonpath取值比较方便,可以一下取到值, jsonPath用符号$表示最外层对象 基本语法 import jsonpath res=jsonpath. ...
- BugKu-baby_flag.txt
下载zip压缩包解压得到图片(你们不要再打啦!hhh)使用winhex或者010查看,最下面看到一串数字 怀疑可能是十六进制转换字符串,然后使用在线网站进行转换,得到一串base64编码, 再进行ba ...
- sql注入代码分析及预防
sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量.但是更深层次的原因是,将用户输入的字符串,当成了 "sql语句" 来执行. 1. ...
- AfterLogicWebMail CSRF导致密码可修改
实验目的 了解CSRF漏洞导致Webmail管理员帐号密码任意被修改 实验原理 当我们打开或者登陆某个网站的时候,浏览器与网站所存放的服务器将会产生一个会话(cookies),在这个会话没有结束时,你 ...
- 用这个BI工具,不会代码的业务人员也能做数据分析!
随着企业的迅速发展,企业对数据分析的需求也在不断地凸显,但我们在实际的工作中经常会遇到这样尴尬的情形:擅长数据分析的人不懂业务,擅长业务的人又不了解数据分析.那么怎么让更懂业务逻辑.业务分析需求和痛点 ...
- 【基础知识】cache 管线(Pipeline)的建立便可以提升cpu的性能,为什么还要去发展多核的cpu?
多管线 (Pipeline)的确可以提高主频,比如搭配 NetBurs架构的Pentium4,它拥有20级的管线技术,虽然可以轻易提高主频,但是效率会降低.而且随着频率的上升,功率也大幅上升温度问题也 ...