Spring--2.Spring之IOC--IOC容器的23个实验(1)
实验1.IOC容器创建对象,并为属性赋值
Hello World:(通过各种方式给容器中注册对象(注册会员))
以前是自己new对象,现在所有对象交给容器创建;给容器中注册组件
以后框架编写流程:
1.导包
核心容器
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
commons-logging-1.1.1.jar
Spring运行的时候依赖一个日志包,没有会报错
2.写配置
Spring的配置文件中,集合了Spring的IOC容器管理的所有组件(会员清单);
创建一个Spring Bean Configuration File(Spring的bean配置文件);
3.测试
new ClassPathXmlApplicationContext("ioc.xml"); ioc容器的配置文件在类路径下
new FileSystemXmlApplicationContext("D://ioc.cml"); ioc容器的配置文件在磁盘路径下
实验2.根据bean的类型从IOC容器中获取bean的实例
1.导包:与实验1一致
2.写配置:与实验1一致
3.测试:
实验3.通过构造器为bean的属性赋值(index,type属性介绍)、通过P名称空间为bean的属性赋值
1.导包:与实验1一致
2.写配置:
3.测试:
实验4.正确的为各种属性赋值
测试使用null值、引用类型赋值(引用其他bean、引用内部bean)、集合类型赋值(List、Map、Properties)、util名称空间创建集合类型的bean、级联属性赋值
没有任何输出
级联属性可以修改属性的属性,注意:原来的bean的值可能会被修改
测试:
//ApplicationContext代表ioc容器
//当前应用的xml配置文件在ClassPath下
//根据Spring的配置文件得到ioc容器对象
// private ApplicationContext ioc=new ClassPathXmlApplicationContext("ioc.xml");
private ApplicationContext ioc=new ClassPathXmlApplicationContext("ioc2.xml");
/**
* 实验4.正确的为各种属性赋值
测试使用null值:默认引用类型就是null;基本类型是默认值
引用类型赋值(引用其他bean、引用内部bean)、
集合类型赋值(List、Map、Properties)、
util名称空间创建集合类型的bean、
级联属性赋值
*
*/
@Test
public void test04() {
// Person bean=(Person)ioc.getBean("person01");
// System.out.println("-------测试:测试使用null值-----------");
// System.out.println(bean.getLastName()==null);
// System.out.println("------------------------------");
//
// System.out.println();
// System.out.println("-------测试:引用类型赋值:引用其他bean-----------");
// System.out.println("person的car:"+bean.getCar());
// Car bean2 = (Car)ioc.getBean("car01");
// bean2.setCarName("haha");
// System.out.println("修改了容器中的car,person的car:"+bean.getCar());
// Car car = bean.getCar();
// System.out.println(car==bean2);
// System.out.println("------------------------------");
// System.out.println();
// System.out.println("-------测试:引用类型赋值:引用内部bean-----------");
// System.out.println("person的car:"+bean.getCar());
// System.out.println("------------------------------");
// Person bean2=(Person)ioc.getBean("person02");
// System.out.println();
// System.out.println("-------测试:集合类型赋值 List-----------");
// List<Book> books = bean2.getBooks();
// System.out.println(books);
// System.out.println("------------------------------");
/**
* 内部bean不能用id获取
* org.springframework.beans.factory.NoSuchBeanDefinitionException:
* No bean named 'carInner' is defined
*/
// Object bean=ioc.getBean("carInner");
// System.out.println(bean);
// Person bean2=(Person)ioc.getBean("person02");
// System.out.println();
// System.out.println("-------测试:集合类型赋值 Map-----------");
// Map<String, Object> maps = bean2.getMaps();
// System.out.println(maps);
// System.out.println("------------------------------");
// Person bean2=(Person)ioc.getBean("person02");
// System.out.println();
// System.out.println("-------测试:集合类型赋值 Properties-----------");
// Properties properties = bean2.getProperties();
// System.out.println(properties);
// System.out.println("------------------------------");
// Person bean3=(Person)ioc.getBean("person03");
// System.out.println();
// System.out.println("-------测试:util名称空间创建集合类型的bean-----------");
// Map<String, Object> maps = bean3.getMaps();
// System.out.println(maps);
// System.out.println("------------------------------");
// Map<String,Object> map = (Map<String,Object>)ioc.getBean("myMaps");
// System.out.println(map.getClass());
// 级联属性可以修改属性的属性,注意:原来的bean的值可能会被修改
System.out.println("-------测试:级联属性赋值-----------");
Person bean4=(Person)ioc.getBean("person04");
Object car = ioc.getBean("car01");
System.out.println("容器中的car:"+car);
System.out.println("Person中的car:"+bean4.getCar());
}
实验5.配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean
1.导包:与实验1一致
2.写配置:
工厂类及工厂方法:
3.测试:
实验6.通过继承实现bean配置信息的重用
1.导包:与实验1一致
2.写配置:
3.测试
实验7.通过abstract属性创建一个模板bean
1.导包:与实验1一致
2.写配置:
在实验6的基础上修改:
3.测试:
在实验6的基础上修改:
不能获取5的实例,它只能用来被被人继承,所以测试抛异常。
实验8.bean之间的依赖
1.导包:与实验1一致
2.写配置:
3.测试:
注意:depends-on表示在创建该实例时,先创建配置的实例;depends-on配置的顺序先后也会改变创建先后。
实验9.测试bean的作用域,分别创建单实例和多实例的bean
1.导包:与实验1一致
2.写配置及3.测试:
单实例(默认):
多实例:
Spring--2.Spring之IOC--IOC容器的23个实验(1)的更多相关文章
- Spring--2.Spring之IOC--IOC容器的23个实验(2)
Spring--2.Spring之IOC--IOC容器的23个实验(1) 中的所有实验我都是在同一个工程中进行的,从第十个实验开始,我将新建一个新的工程开始实验. 目前导包还是跟第一个项目一致,bea ...
- String框架搭建的基本步骤,及从 IOC & DI 容器中获取 Bean(spring框架bean的配置)--有实现数据库连接池的链接
Spring框架的插件springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite(是一个压缩包)导入步骤: eclipse->help-> ...
- Spring学习(一):理解IoC容器
序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...
- 【spring源码分析】IOC容器初始化(总结)
前言:在经过前面十二篇文章的分析,对bean的加载流程大致梳理清楚了.因为内容过多,因此需要进行一个小总结. 经过前面十二篇文章的漫长分析,终于将xml配置文件中的bean,转换成我们实际所需要的真正 ...
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
- 【spring源码分析】IOC容器初始化(三)
前言:在[spring源码分析]IOC容器初始化(二)中已经得到了XML配置文件的Document实例,下面分析bean的注册过程. XmlBeanDefinitionReader#registerB ...
- 【spring源码分析】IOC容器初始化(四)
前言:在[spring源码分析]IOC容器初始化(三)中已经分析了BeanDefinition注册之前的一些准备工作,下面将进入BeanDefinition注册的核心流程. //DefaultBean ...
- 【spring源码分析】IOC容器初始化(七)
前言:在[spring源码分析]IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFa ...
- 【spring源码分析】IOC容器初始化(十)
前言:前文[spring源码分析]IOC容器初始化(九)中分析了AbstractAutowireCapableBeanFactory#createBeanInstance方法中通过工厂方法创建bean ...
随机推荐
- C# 判断两条直线距离
本文告诉大家获得两条一般式直线距离 一般式的意思就是 Ax+By+C=0" role="presentation">Ax+By+C=0Ax+By+C=0 如果有两个 ...
- ASP.NET一般登陆逻辑分享(01)
- 从零开始学习Kafka
简介 kafka是一个分布式消息队列.具有高性能.持久化.多副本备份.横向扩展能力.生产者往队列里写消息,消费者从队列里取消息进行业务逻辑.一般在架构设计中起到解耦.削峰.异步处理的作用. Kafka ...
- Java中的元注解
注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据. 通过使用注解,我们可以将这些元数据保存在Java源代码中,并利用annotation API为自己的 ...
- [转]【转】大型高性能ASP.NET系统架构设计
大型高性能ASP.NET系统架构设计 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳 ...
- 模版——KMP
#include <iostream> #include <cstdio> #include <cstring> ; int f[maxn]; char P[max ...
- P1076 单词覆盖还原
题目描述 一个长度为 \(l(3\le l\le 255)\) 的字符串中被反复贴有 boy 和 girl 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没 ...
- ActiveMQ--配置端口
配置端口 端口配置选项 一般最常用的URI是连接到代理的端口URI,通常为TCP或VM端口. 要注意空格:所有的URI都是基于java.net.URI类,它并不允许使用空格.所以,如果你使用failo ...
- JavaScript数据类型总结
1. 六种简单数据类型:Undefined.Null.Boolean.Number.String.Symbol(新增): 一种复杂数据类型:Object: (1)基本数据类型保存在栈内存中,是按值传 ...
- I/O 端口和 I/O 内存
每个外设都是通过读写它的寄存器来控制. 大部分时间一个设备有几个寄存器, 并且在连 续地址存取它们, 或者在内存地址空间或者在 I/O 地址空间. 在硬件级别上, 内存区和 I/O 区域没有概念上的区 ...