Spring的IOC容器学习笔记
(一)Spring的IOC学习
在applicationContext.xml来配置bean,通过该接口,在主程序中,可以指定初始化的对象,不需要在进行赋值操作,直接在xml里配置好。
接下来分享的是bean配置的多种方法:
①通过类的id获取bean
<bean id="user" class="com.author.bean.user">
<property name="name" value="Spring"></property>
<property name="age" value="18"></property>
<property name="sex" value="男"></property>
</bean>
在主函数中,通过容器里的id来获取bean对象
ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");
user beanUser=(user)aContext.getBean("user");
beanUser.print();
输出该对象的信息:

②通过类型获取bean,缺点是只能是一个该类型的bean对象,如果有多个则会出错,多个可以通过id的方式来进行获取
例如上面的user对象,在主函数中可以这样获取:
ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");
user beanUser=aContext.getBean(user.class);
beanUser.print();
得到的结果和上面的一样
二、给bean的属性赋值多种操作
①直接通过<property name="name" value="Spring"></property>利用name,value的方式进行赋值
②通过构造器进行赋值,前提在bean类中有该构造函数
<bean id="user03" class="com.author.bean.user">
<constructor-arg name="name" value="小明"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
</bean>
还可以直接省略name属性:
<!-- 省略name属性 -->
<bean id="user04" class="com.author.bean.user">
<constructor-arg value="校花"></constructor-arg>
<constructor-arg value="10"></constructor-arg>
<constructor-arg value="女"></constructor-arg>
</bean>
通过索引值指定参数位置
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010" index ="0"/>
<constructor-arg value= "Book01" index ="1"/>
<constructor-arg value= "Author01" index ="2"/>
<constructor-arg value= "20.2" index ="3"/>
</bean >
通过类型不同区分重载的构造器
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010" index ="0" type="java.lang.Integer" />
<constructor-arg value= "Book01" index ="1" type="java.lang.String" />
<constructor-arg value= "Author01" index ="2" type="java.lang.String" />
<constructor-arg value= "20.2" index ="3" type="java.lang.Double" />
</bean >
p名称空间:为了简化XML文件的配置,越来越多的XML文件采用属性而非子元素配置信息。
需要导入:xmlns:p="http://www.springframework.org/schema/p"
<bean
id="studentSuper"
class="com.atguigu.helloworld.bean.Student"
p:studentId="2002" p:stuName="Jerry2016" p:age="18" />
三、内部bean对象以及引用对象
通过<null/>指定空元素
引用对象的使用:ref=“引用外部对象的id”
<bean id="car01" class="com.author.bean.car">
<constructor-arg value="宝马" ></constructor-arg>
<constructor-arg value="蓝白色"></constructor-arg>
<constructor-arg value="30000"></constructor-arg>
</bean> <bean id="user05" class="com.author.bean.user">
<property name="name">
<null></null>
</property>
<!-- ref引用的是外部的bean -->
<property name="car" ref="car01"></property>
</bean>
内部bean对象:相当于car=new car(),car对象在user对象里
<bean id="car01" class="com.author.bean.car">
<constructor-arg value="宝马" ></constructor-arg>
<constructor-arg value="蓝白色"></constructor-arg>
<constructor-arg value="30000"></constructor-arg>
</bean> <bean id="user05" class="com.author.bean.user">
<property name="name">
<null></null>
</property>
<!-- 相当于car=new car() 引用内部bean -->
<property name="car">
<bean class="com.author.bean.car">
<property name="name" value="自行车"></property>
</bean>
</property>
</bean>
四、集合属性
①List和map
List集合里包括:一个自定义的对象,一个引用对象。
配置java.util.List类型的属性,需要指定<list>标签,在标签里包含一些元素。
这些标签可以通过<value>指定简单的常量值,通过<ref>指定对其他Bean的引用。
通过<bean>指定内置bean定义。通过<null/>指定空元素。
Map集合里包括:2个value,一个引用,一个自定义对象,都对应着不同的key值
<map>标签里可以使用多个<entry>作为子标签。每个条目包含一个键和一个值。
必须在<key>标签里定义键。
因为键和值的类型没有限制,所以可以自由地为它们指定<value>、<ref>、<bean>或<null/>元素。
可以将Map的键和值作为<entry>的属性定义:简单常量使用key和value来定义;bean引用通过key-ref和value-ref属性定义。
<bean id="refbook" class="com.author.bean.Book">
<property name="name" value="西厢记"></property>
</bean> <bean id="user06" class="com.author.bean.user">
<property name="books">
<list>
<!-- list标签体中添加每一个元素 -->
<bean class="com.author.bean.Book">
<property name="name" value="西游记"></property>
<property name="author" value="吴承恩"></property>
<property name="price" value="80"></property>
</bean>
<ref bean="refbook"></ref>
</list>
</property>
<property name="maps">
<map>
<entry key="key01" value="张三"></entry>
<entry key="key02" value="18"></entry>
<entry key="key03" value-ref="refbook"></entry>
<entry key="key04">
<bean class="com.author.bean.car">
<property name="name" value="宝马">
</property>
</bean>
</entry>
</map>
</property>
</bean>
在主函数中,输出结果:
user beanUser2=(user)aContext.getBean("user06");
System.out.println(beanUser2.books);
System.out.println(beanUser2.maps);
结果为:

②Properties
使用<props>定义java.util.Properties,该标签使用多个<prop>作为子标签。每个<prop>标签必须定义key属性
<bean class="com.atguigu.spring.bean.DataSource" id="dataSource">
<property name="properties">
<props>
<prop key="userName">root</prop>
<prop key="password">root</prop>
<prop key="url">jdbc:mysql:///test</prop>
<prop key="driverClass">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
③集合类型的bean
如果只能将集合对象配置在某个bean内部,则这个集合的配置将不能重用。我们需要将集合bean的配置拿到外面,供其他bean引用。
配置集合类型的bean需要引入util名称空间:xmlns:util="http://www.springframework.org/schema/util"
<util:map id="myMap">
<entry key="key01" value="张三"></entry>
<entry key="key02" value="18"></entry>
<entry key="key03" value-ref="refbook"></entry>
<entry key="key04">
<bean class="com.author.bean.car">
<property name="name" value="宝马">
</property>
</bean>
</entry>
</util:map> <util:list id="myList">
<bean class="com.author.bean.Book"></bean>
<value>12</value>
<ref bean="myMap"></ref>
</util:list>
五、级联属性
含义:可以控制属性的属性
可以改变user07下的car的price属性,如果car为引用对象,那么引用对象也会被修改
<!-- 级联属性可以控制属性的属性 -->
<bean id="user07" class="com.author.bean.user">
<property name="car" ref="car01"></property>
<property name="car.price" value="900000"></property>
</bean>
--------------这就是今天分享的bean的配置操作。
明天学习:利用工厂来创建bean
Spring的IOC容器学习笔记的更多相关文章
- spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)
Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...
- Spring实战第一章学习笔记
Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...
- Unity(IOC)学习笔记
原文:Unity(IOC)学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/79432 ...
- Spring的IOC容器第一辑
一.Spring的IOC容器概述 Spring的IOC的过程也被称为依赖注入(DI),那么对象可以通过构造函数参数,工厂方法的参数或在工厂方法构造或返回的对象实例上设置的属性来定义它们的依赖关系,然后 ...
- 好莱坞原则—Spring的IOC容器
IOC容器的概念,之前在学习SSH的时候,就有接触过.但那时候也仅仅是知道这么个概念,认为它非常难理解.事实上并非它难理解,而是我并没有停下来好好对它总结梳理过. IOC(Inversion of C ...
- Spring的IoC容器(转)BeanFactory
Spring的IoC容器 Spring读书笔记-----Spring的Bean之Bean的基本概念 加菲猫 Just have a little faith. Spring的IoC容器 (用户持久化类 ...
- Spring Cloud微服务学习笔记
Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...
- Spring 深入——IoC 容器 01
IoC容器的实现学习--01 目录 IoC容器的实现学习--01 简介 IoC 容器系列的设计与实现:BeanFactory 和 ApplicationContext BeanFactory load ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
随机推荐
- 用 Java 实现人脸识别功能(附源码)
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...
- jquery-购物车js
购物车示例js,为了方便参考,页面写的比较简单.示例如下图所示: html代码如下: <!doctype html> <html lang="en"> &l ...
- 原生js实现replace方法
今天看到有人提问js的replace方法怎么实现的,自己就试了试js手册里的String对象的介绍replace大概是这样: string.replace(regexp, replacement) 第 ...
- js数组冒泡排序、快速排序、插入排序
1.冒泡排序 //第一种 function bubblesort(ary){ for(var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.leng ...
- swoft 上传图片到 阿里云oss aliyun-oss
1.swoft 获取上传的文件 .官方文档上面没有看到 $files = $request->getUploadedFiles(); $file = $files['file']; 2.在模型 ...
- 基于VR三维全景的虚拟展馆展览实现
VR三维全景虚拟现实技术的应用,能够通过全方位互动式来还原真实场景,令人产生一种身临其境的感觉,由于三维全景虚拟现实技术具有一定应用优势,其在企业与院校展示.建筑规划展示.酒店宾馆展示等方面都逐步得到 ...
- NoVNC安装部署
noVNC 是一个 HTML5 VNC 客户端,采用 HTML 5 WebSockets, Canvas 和 JavaScript 实现,noVNC 被普遍用在各大云计算.虚拟机控制面板中,比如 Op ...
- 开源项目在闲鱼、b 站上被倒卖?这是什么骚操作?
起因 - 又是一封邮件 2020 年 3 月 2 日,收到了一封邮件,对,这次故事的起因又是一封邮件,和上次写个bug被国家信息安全漏洞共享平台抓到了一样. 这是一条评论通知邮件,一开始我以为只是正常 ...
- windows 下载~安装nginx
nginx 中文文档 http://www.nginx.cn/doc/ 到nginx官网下载安装包http://nginx.org/en/download.html 解压安装包 进入windows的c ...
- (转)协议森林15 先生,要点单吗? (HTTP协议概览)
协议森林15 先生,要点单吗? (HTTP协议概览) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们在TCP流通信中说明了, ...