6.22Spring学习笔记

学习Spring的第二天
实验1:通过IOC容器创建对象,并为属性赋值★
一.使用IOC容器必须要进行三步走:1.导包,看项目需要用到哪些jar包,可以去Spring官网查询
2.xml配置文件
3.IOC调试Applicationcontext ioc = new ClassPathXmlApplicationcontext(“配置文件名字”);
二.该实验xml格式:

</bean>
<bean id="" class="">
	<property name="" value=""></property>
</bean>

注意:创建对象,是调用无参构造器,通过setter,getter方法创建的,而是通过有参构造器创建的对象
ioc.getBean(“id”);获取对象

实验2:根据bean的类型从IOC容器中获取bean的实例★
与实验一类似,但是这里是通过其他类型,比如ioc.getBean(“类名.class”);
ioc.getBean(“类名.class”)注意:当xml文件中有注册多个该类名的对象时,会报错

实验3:
通过构造器为bean的属性赋值(index,type属性介绍)
通过p名称空间为bean赋值
一.构造器分为无参构造器和有参构造器,分别通过关键字“property”和“<constructor-arg>”写入数据

二.index是在有参构造时,参数输入顺序需要调整时调用,是一个索引,从0开始,例如:

</bean>
<bean id="" class="">
	<constructor-arg name="a" index="2"></constructor-arg>
	<constructor-arg name="b" index="0"></constructor-arg>
	<constructor-arg name="c" index="1"></constructor-arg>
</bean>

这里创建时的顺序将会是bca

三.type属性的使用是在构造器重用时处理问题,例如以下两个有参构造器:
public constructor(String a,Integer b,Stgring c){}
public constructor(String a,String b,Stgring c){}
可以发现两个方法的参数b的类型不一致,这时候就可以用type为参数规定属性了,比如这样:

</bean>
<bean id="" class="">
	<constructor-arg name="a" value="" ></constructor-arg>
	<constructor-arg name="b" value="" type="Integer"></constructor-arg>
	<constructor-arg name="c" value="" ></constructor-arg>
</bean>

这个情况就是为整型b赋值了

四.名称空间:在xml中,名称空间是用来防止标签重复的
在Resource里面导入p名称空间,然后写标签的时候可以在前面加入p:之类的字样防止标签重复,例如这样:<p:name></p:name>

实验4:正确的为各种属性赋值
测试使用null值 、
引用类型赋值(引用其他bean、引用内部bean)----ref
集合类型赋值(List、Map、Properties)、
util名称空间创建集合类型的bean
级联属性赋值
一.赋值在实验一二时已经掌握,当需要测试使用null值时,在内部进行赋值,像这样:<property name=""><null/></property>

二.引用其他bean,通过ref进行引用,
例如:假设xml文件里面已经注册了一个car对象,在对另一个类注册时需要创建Car对象时就可以引用该对象

<bean id="" class="">
	<property>
		<bean class="" ref=""></bean>
	</property>
</bean>

注意,由于是引用,所以所指向的是同一地址,如果引用后对数据进行了修改,将造成被引用bean内部数据也修改

三,测试时,是无法通过ioc.getBean()调用嵌套在property内部的bean的

四.集合类型的赋值
List:

<bean id="" class="">
	<property>
		<list></list>
	</property>
</bean>

Map:

<bean id="" class="">
	<property>
		<map></map>
	</property>
</bean>

Properties:

<bean id="" class="">
	<property>
		<propertise></propertise>(一般只能放String类型的,像数据库的用户名的密码通常用这个)
	</property>
</bean>

五.util名称空间创建集合类型的bean
由于util是名称空间,所以一样需要在resource里面添加util名称空间
例如用util名称空间创建集合类型的map:
注意:这里必须给map指定一个id,由此方便调用

实验5:通过继承实现bean配置信息的重用

<bean id="" class="" parent="a"></bean>

这会a的所有属性,同时还可以修改部分属性作为该注册内容,例如:

<bean id="" class="" parent="a">
	<property name="" value=""></property>
</bean>

注意:此处a不是它的父类,他们所注册的内容都是关于同一个类,所以无关子父类之说

实验6:通过abstract属性创建一个模板bean
这里涉及到了单实例和多实例,单实例在创建ioc容器时,就已经注册了对象,而多实例,是在对象创建的时候再注册的
abstract,抽象的意思,也就是说,如果把这个bean设置为了抽象,那么他将无法实例化,但是可以被继承
写法:<bean id="" class="" abstract="true"></bean>

实验7:bean之间的依赖
注册对象的时候,一般是按照顺序创建,这里没有索引一说,而是通过依赖来调整创建顺序,例如:、

<bean id="a" depends-on="c,b"></bean>
<bean id="b"></bean>
<bean id="c"></bean>

此时的创建顺序会是cba

实验8:测试bean的作用域,分别创建单实例和多实例的bean★
主要通过在bean里面添加scope设置对象为单实例或者多实例,单实例与多实例的区别在实验6就已经说明
写法:
<bean id="" class="" scope="prototype"></bean> “propertype”:多实例,默认为单实例也可以如下

<bean id="" class="" scope="singleton"></bean>	//"singleton":单实例

实验9:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean★
工厂是一种设计模式,分为静态工厂和实例工厂
静态工厂:类名.静态方法();
实例工厂:必须创建类的对象,然后通过对象调用方法;
区别,关键字static
使用方法:
1.静态工厂:(这里a,b均为类名,可更改)
1>先创建一个a.java文件,用于定义数据类型
2>然后创建一个b.java文件作为静态工厂,方法需要返回a对象,可以是有参方法也可以是无参方法
3>写xml配置文件,写法

<bean  id="" class=".b" factory-method="">
		<constructor-arg name="" value=""></constructor-arg>
</bean>
我这里是带一个参数的有参方法,注意factory-method指这个方法名

2.实例工厂:
与静态方法差不多,区别就是方法里面去掉了static
同时xml配置文件也需要改变
//创建FactoryBean

<bean  id="interfaceFactory" class="Factory.InterfaceFactory">
</bean>

<bean id="airplane2" class="com.guigu.bean.AirPlane"
	factory-bean="interfaceFactory" factory-method="getAirPlane">
	<constructor-arg name="" value=""></constructor-arg>	
</bean> 
															author:鱼小白
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值