[spring]XML配置文件定义Bean属性

    在spring中,我们需要通过一个符合格式的XML文件来配置Bean的数据。在我另一篇文章的案例中,我们使用的配置文件就命名为Bean.xml,在这里我们详细介绍一下Bean的XML配置的相关内容。

    以下是一个Bean配置文件的基础样式:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    
</beans>

    Bean配置文件主要声明三个内容:

1.声明如何创建一个bean。

2.声明bean生命周期的详细信息。

3.声明bean与bean之间的依赖关系。

    接下来先讲一下XML基础的使用。

    <bean>是spring的XML配置里的核心标签。 它主要有以下几个属性:

class、name/id、scope、init-method、destroy-method、lazy-init。

class

    这个属性是必须要有的,用来指定创建 bean 的类。

name/id

    这两个属性的功能基本是一样的,都是给某个Bean添加名字。它们都是用来指定唯一标识名的。这个唯一标识的“唯一”,指的是这个标识唯一,不是说这个Bean只能有这么一个唯一的Bean。

    因为是唯一标识,id属性的值在该XML配置文件里面必须是唯一的。并且它的值要求遵循 XML 的 ID 约束,必须以字母开头,后面可以跟字母、数字、连字符、下划线

    name属性的值可以包含特殊字符,并且可以为一个 Bean 指定多个name,多个name之间用逗号、分号或空格分隔。这里示例:

scope

    该属性指定由特定的 bean 定义创建的对象的作用域或存在方式。它的值有:singleton、prototype、request、session、global-session。其中,前两者最为常用,而后三者需要在MVC环境下才会有,现在这里先只介绍前两者。

    singleton是默认值,表示单例模式。意思是,在一个IOC容器里面,只能存在一个该Bean的对象。就像我们电脑里任务管理器,你多次通过 ctrl+alt+.+回车键 来打开任务管理器,你会发现前面开启的任务管理器像是被关掉了然后又弹出来,哪怕开启多个桌面也至始至终都只有一个。它就是一种单例对象。

     我们编写一段代码,其中AServer和BServer里面都获取了同一个对象,我们将其输出,查看结果。

     在AServer里面我们创建了一个IOC容器,从中获取同一个Bean对象。从运行结果可以看到我们获取三次Bean对象,这三个对象的内存地址都是一样的,也就是说这三个实际上是同一个对象。这里要注意,必须是同一个IOC容器调用getBean方法获取同一个Bean对象。

    然后我们来看prototype。

    prototype则是多例模式。同一个IOC容器里,允许有多个同一个Bean的实例对象。我们修改前面的代码,只将Bean配置文件中的scope属性改成prototype:

    可以看到现在的Bean对象就不再只是一个了,而是不同的三个。可以理解为设置为多例模式之后,每次调用该IOC的getBean方法,spring的IOC容器就帮我们new了一个对象。 

初始化和销毁

    init-method和destroy-method分别用来指定该Bean的初始化和销毁方法。

    初始化方法和字面上意思有一点差别,准确说它是在该Bean对象创建后立刻调用的方法。该方法通常用来执行一些初始化操作,所以被叫做初始化方法。

    销毁方法一样,是在该Bean对象销毁前调用的方法。通常用来做内存回收、事务回滚等善后工作,所以也被叫做销毁方法。

    这里我们给原先的案例添加代码来演示:

新的实体类

配置Bean.xml文件:

测试类:

    在这里我们主要Bean配置文件中scope需要注明为单例模式,且beanFactopry的销毁方法为destroySingleton。 

运行效果: 

    这里讲解一下前面需要讲解的点。

    首先是beanFactory销毁某个单例模式的Bean的对象的方法为:destroySingleton(单例Bean的id)。

    而且只有单例模式的Bean对象,设置销毁方法才有意义。因为对于多例模式的Bean对象,IOC容器只负责创建注入等工作,它们生命周期何时结束由对应的程序块决定。而单例模式的Bean对象则由IOC容器进行管理。 

    然后我们测试类中,我们获取了两次Student的Bean对象,而初始化方法只调用了一次,说明单例模式下,所有程序块获取到的这个Bean对象在内存中都是同一个对象。

    接着我们再将Bean - Student改为多例模式,再次运行测试类:

    可以看到,多例模式每次获取Bean对象都会new一个新的对象出来,且IOC容器不再管理它们的生命周期的结束。 

初始化的其他方式

    刚刚我们讲到初始化方法可以在对象创建后做一些初始化操作,当然我们想要初始化不止配置init-method,我们还可以通过实现InitializingBean接口,然后重写afterPropertiesSet()方法。

    我们删除student的初始化方法属性,然后让Student类继承InitializingBean接口:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值