// 分别省略了getter setter
public class Student {
private String name;
private int age;
private Teacher teacher;
} public class Teacher {
private String tno;
private String name;
}
<bean id="teacher" class="com.DO.Teacher">
<property name="tno" value="123"></property>
<property name="name" value="ls"></property>
</bean>
1、set方式注入(利用反射):
<bean id="student" class="com.DO.Student"> //调用类的无参构造器
<property name="name" value="zxf"></property> // 调用对应属性的set方法
<!-- <null/> 给属性赋 null
<property name="name">
<null/>
</property> -->
<property name="age">
<value>22</value>
</property>
<property name="teacher" ref="teacher"></property>
</bean>
注意:
2、通过构造器注入:
<bean id="student" class="com.DO.Student">
<!-- 根据参数的个数 会去调用相应的构造器 也可以通过索引指定 index 从0开始 也可以通过name指定参数名 或者指定参数的类型type -->
<constructor-arg value="zs"></constructor-arg>
<constructor-arg value="23"></constructor-arg>
<constructor-arg ref="teacher"></constructor-arg>
</bean>
3、p命名空间:
引入p命名空间:
xmlns:p="http://www.springframework.org/schema/p"
<bean id="student" class="com.DO.Student" p:name="zs" p:age="22" p:teacher-ref="teacher"></bean>
自动装配:
byName:属性 与 bean的id 相同就自动装配
byType:属性 与 bean的类型(class="") 相同就自动装配
可以把所有的bean都设置成自动装配: 在命名空间里添加: default-autowire="defalut"
自动装配会减少代码量,但是胡降低可读性
<bean id="student" class="com.zxf.DO.Student" autowire="byName">
<property name="name" value="zs"></property>
<property name="age" value="22"></property>
<!-- 自动装配: 如果 该bean的属性 与 某个bean的id相同就会自动装配 student的teacher属性 与 id="teacher" 相匹配
byName 的本质是 byId
-->
</bean>
SpringIOC容器负责创建Bean
依赖注入:set方式注入: 把属性值注入给属性,把属性注入给对象。
通过构造器注入:调用相应的构造器,然后把value值注入进去。
p命名空间: 即使用p命名空间注入属性值。
控制反转:反转了用户获取对象的方式,从new (创建) --> get(直接拿)
对集合类型的注入:
// 省略了对应的getter setter
public class ALLCollection {
private List listElement;
private String[] arrayElement;
private Set setElement;
private Map mapElement;
private Properties propsElement;
}
<bean id="collection" class="com.zxf.DO.ALLCollection">
<property name="listElement">
<list>
<value>list苹果</value>
<value>list香蕉</value>
</list>
</property>
<property name="arrayElement">
<array>
<value>array苹果</value>
<value>array香蕉</value>
</array>
</property>
<property name="setElement">
<set>
<value>set苹果</value>
<value>set香蕉</value>
</set>
</property>
<property name="mapElement">
<map>
<entry>
<key><value>map1</value></key>
<value>map苹果</value>
</entry>
<entry>
<key><value>map2</value></key>
<value>map香蕉</value>
</entry>
</map>
</property>
<property name="propsElement">
<props>
<prop key="prop1">prop苹果</prop>
<prop key="porp2">prop香蕉</prop>
</props>
</property>
</bean>
Spring 依赖注入(DI) 的三种方式 和 对集合类型的注入的更多相关文章
-
【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
-
Spring的依赖注入(DI)三种方式
Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...
-
Spring学习(二)三种方式的依赖注入
1.前言 上一篇讲到第一个Spring项目的创建.以及bean的注入.当然.注入的方式一共有三种.本文将展开细说. 1.set注入:本质是通过set方法赋值 1.创建老师类和课程类 1.Course ...
-
【Spring】Spring之向 IOC 容器注入对象的三种方式
关于Spring的搭建可参见:浅析Spring框架的搭建.在测试之前还是应该先将环境配置好,将相关Jar包导进来.Spring创建的对象,默认情况下都是单例模式,除非通过scope指定. 向IOC容器 ...
-
Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
-
Spring Boot应用启动的三种方式
Spring Boot应用HelloWorld的三种启动方式: 项目的创建可以在http://start.spring.io/网站中进行项目的创建. 首先项目结构: 1. 通过main方法的形式启动 ...
-
框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
一.依赖注入DI 学习目标1)搞清楚构造参数依赖注入的过程及类2)搞清楚注解方式的属性依赖注入在哪里完成的.学习思路1)思考我们手写时是如何做的2)读 spring 源码对比看它的实现3)Spring ...
-
spring入门 依赖入注的三种方式(1)
第一种:构造器参数注入 第二种:setter方法属性注入(setter方法的规范-JavaBean规范) 第三种:接口注入 Bean 属性的注入:对一个对象的属性的赋值 1.构造器参数注入: publ ...
-
Spring容器装配Bean的三种方式
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
随机推荐
-
swfupload使用说明
网上的例子介绍的文档真的很多.下面简单介绍一下 SWFUpload的文件上传流程是这样的: 1.引入相应的js文件 2.实例化SWFUpload对象,传入一个配置参数对象进行各方面的配置. 3.点击S ...
-
PAT 天梯赛 L1-009 N个数求和
模拟题 题目链接 题解 每次将两个分数进行相加,到最后再将结果化成带分数.主要考察的最大公约数与最小公倍数. 代码如下: #include<cstdio> #include<cstd ...
-
阿里云CentOS部署小笔记
快毕业了,我用近两周的时间完成了一个nodeJs+Vue-Cli+Mysql的毕业设计,到了部署的时候了. 然而,博主使用Linux的经验有限得很,所以只能自己慢慢地填坑了. 一.准备工作 1)阿里云 ...
-
<;Android基础>; (七)内容提供器
第七章 内容提供器 7.1 内容提供器(Content Provider) 主要应用于在不同的应用程序之间实现数据共享功能.允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性. 7.2 ...
-
javascript节点移除
var itemdel = document.getElementById("test"); itemdel.removeChild(lis[0]); 兼容性较好 itemdel. ...
-
VIM编辑器和VI编辑器的区别
vi 和vim 的区别 写在前面:这个两个"东西"着实让我烦恼一阵子,但是自己一直没当回事,但是遇到了好几次再决定彻底把他们搞的明白,一下是我通过查找资料了解到的关于这两个编辑器的 ...
-
Eclipse 文件太长,导致着色异常问题
1. 把C/C++ ->Editor->Scalability, 对应红框中的数字调大.
-
AMD 与CMD
AMD AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义".它采用异步方式加载模块,模块的加载不影响它后面 ...
-
Machine Learning——吴恩达机器学习笔记(酷
[1] ML Introduction a. supervised learning & unsupervised learning 监督学习:从给定的训练数据集中学习出一个函数(模型参数), ...
-
日期插件kalendae,遇到的一些问题
1.日期中文显示 /*_months : 'January_February_March_April_May_June_July_August_September_October_November_D ...