0%

Bean管理xml

spring入门:第二节——Bean管理xml

PS:该文章只是做一个理论梳理和介绍,还需要结合实际操作来掌握知识,该篇文章仅作为概念介绍和对实际操作的梳理,如果有帮上忙的话,非常荣幸。

第一部分:

1.创建对象。上一节说到,在程序中使用spring框架,可以有效的降低程序的耦合度,这一节就来说说如何在程序中使用spring的写法。

第一步:在src目录下创建xml文件(配置文件),通过bean标签将Java类连接到BeanFactory中,形成一个Bean类,写法如下:

<Bean id="" class=""></Bean>

id:作者可以自行定义id名称,这个属性相当于每个人的姓名,可以通过id来区分不同的Bean。

class:选择Bean要连接的类,指定src目录下类的完整路径来进行连接。

示例:

1
<bean id="1" class="spring5testcollection.ctype.Stu">

通过Bean标签连接了spring5testcollection包下的ctype包下的Stu类,设置了这个Bean标签的id为1。

第二步:在Java类中通过Applicationcontext这一属性来导入xml配置文件:

示例:

1
ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");

1.1ApplicationContext 和BeanFactory

ApplicationContext 和BeanFactory都可以用于导入配置文件,那么这两者有什么区别呢。

BeanFactory:Spring自带的属性,在导入配置文件的时候不会生成对象,只有当对象被调用的时候才会创建对象。

ApplicationContext:BeanFactory的子类,在导入配置文件的时候会创建对象。

为什么选择ApplicationContext:BeanFactory只有在使用的时候才会创建对象,确实是节省了资源,但是导入配置文件的操作一般的执行时机是程序初始化的时候,在程序初始化的过程中完成对象的创建,之后在调用程序的时候就不用分出资源去进行对象创建了,从开发角度来讲,ApplicationContext更符合开发的需求,所以选择ApplicationContext。

1.2ApplicationContext的路径

ApplicationContextApplicationContext:从src目录下开始查找xml文件路径

FileSystemXmlApplicationContext:从C盘目录下开始查找xml文件路径

第三步:依赖注入(注入属性)。在xml文件中定义Java类的属性的值。

注入属性的方法:property标签

<property name="" value=""></property>

name:要注入值得属性名。Bean标签连接了一个UmaC类,UmaC类中有一个String类型的属性umaid,我们想要给这个umaid赋值,那第一步做什么,自然是在Bean标签的范围内写Property标签,就好像你找浙江省的EML,跑到江苏省的地皮去找,那肯定是找不着人的,所以第一步要做的就是在正确的Bean标签下写property标签,第二步,在property的name中写上umaid,通过xml配置文件告诉程序,我找的就是那个叫umaid的小子。

value:程序看到name上写了umaid,瞬间懂了,来一句“太君,this way”,带着property标签找到了这个属性,那人找到了,接着干什么呢,注入属性,所以value这个标签就写上你想注入的值。

示例:

1
2
3
<bean id="3" class="spring5testcollection.ctype.UmaC">
<property name="umaid" value="002"></property>
</bean>

这时候有的同学就想,这人也找到了,注入的属性也确定了,那下一步总该是狠狠的注入了吧。然而现实就是“达咩”,为什么捏,因为这个属性没有Set方法,是没有办法通过标签注入属性的,就好像你找到别人家门口,做好准备大干一场了,但是没有钥匙开门,所以下一步就是在Java类中定义Set方法,也就是教你如何开门。

示例:

1
2
3
4
5
private String Umaid;

public void setUmaid(String umaid) {
Umaid = umaid;
}

定义了Set方法之后,property可以通过name找到Set方法,然后注入value了,第一种属性注入的方式就完成了。

第二种注入方式:有参构造器注入

和property类似,但是第一点要求Java类中有有参构造器,另外就是不能用property了,要用标签 <Constructor-arg name="" value=""></Constructor-arg>

(未完待续)

碎碎念:写文实在太累人了,所以之后可能就是做一些我自己看的懂的知识梳理,以后有空的时候再尽量写成容易看懂的大白话吧。中间打老头环和无双类游戏摸了很久的鱼,上一次更新spring还是在3.4,哎,我这态度属实摆烂王了。

第二部分开始都是个人化的梳理:

第二部分:Bean管理xml方式

1.注入空值和特殊符号

字面量:注入的属性值。

注入空值:

<property name="">

<null/>

</property>

注入特殊符号:

2.注入外部Bean

property标签使用ref属性注入外部属性

一:Dao接口

二:Dao实现类

三:service层,调用了Dao类,并设置了Set方法。这里的Set方法是必要的,只有Java类拥有Set方法(属性处于可写状态下),标签才能对Java类创建对象和注入属性。

四:property通过ref属性调用id为UserDao的bean类。这里值得注意的是id为UserDao的Bean类,class的路径指向是接口的实现类,不能是什么具体类都没有的接口。

3.注入内部Bean,级联赋值

(1)Bean标签写在property内,就叫注入内部Bean

<bean id="1" class="spring5test.employee.emp">
<property name="dept">
<bean id="2" class="spring5test.employee.dep">
<property name="dname" value="人事部"></property>
</bean>
</property>
</bean>

(2)注入内部Bean的第二种写法

1
2
3
4
5
6
7
8
9
10
<bean id="1" class="spring5test.employee.emp">
<property name="eid" value="114514"></property>
<property name="ename" value="张三"></property>
<property name="dept" ref="2"></property>
<property name="dept.dname" value="轻音部"></property>
//只有另一个bean类存在且已经通过ref进行关联的前提下,才能用这种级联方式
</bean>
<bean id="2" class="spring5test.employee.dep">
<property name="dname" value="技术部"></property>
</bean>

(3)级联赋值

同时对多个Java类赋值,就叫做级联赋值

4.注入集合类型属性

(1)四种集合:数组,list,map,set

<bean id="1" class="spring5testcollection.ctype.Stu">
<property name="course">
<array>
<value>Mcqueen </value>
<value>Teio </value>
<value>Ogrin </value>
<value>卤豆腐 </value>
</array>
</property>
<property name="list">
<list>
<value>special week </value>
<value>grass wonder </value>
<value>pasa </value>
</list>
</property>
<property name="maps">
<map>
<entry key="one" value="tama cross"></entry>
<entry key="two" value="baxin"></entry>
<entry key="three" value="gold ship"></entry>
</map>
</property>
<property name="sets">
<set>
<value>北部玄驹 </value>
<value>里见光钻 </value>
<value>大鸣大放 </value>
</set>
</property>
</bean>

(2)注入对象类型的属性

<bean id="1" class="spring5testcollection.ctype.Stu">
<property name="list">
<list>
<ref bean="2"></ref>
<ref bean="3"></ref>
</list>
</property>
</bean>
<bean id="2" class="spring5testcollection.ctype.UmaC">
<property name="umaid" value="001"></property>
</bean>
<bean id="3" class="spring5testcollection.ctype.UmaC">
<property name="umaid" value="002"></property>
</bean>

(3)通过util名称空间提取公共属性

一、xmlns设置util名称空间

原始配置的xmlns:

配置util名称空间:

二、util名称空间提取属性

1
2
3
4
5
<util:list id="umayo">
<value>小栗帽</value>
<value>玉藻十字</value>
<value>足球射手</value>
</util:list>

三、在property标签中通过ref和id将util名称空间的属性进行注入

1
2
3
<bean id="1" class="spring5testcollection.ctype.Umaid">
<property name="uma" ref="umayo"></property>
</bean>

最后放一张思维导图