(三) IoC——bean组件

1. bean组件的装配

   bean的装配,即bean对象的创建及属性赋值,容器创建bean对象后再传递给代码。代码通过ApplicationContext的getBean()方法,从容器获取指定的bean实例(容器默认会调用bean类的无参构造器),创建空值的实例对象。

   XML装配方式是Spring刚刚出现的时候最主要的装配方式,使用XML装配方式,需要将用到的所有bean都写入到XML文件中。

<?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">
    
    <bean id="someService" class="com.lyj.main.service.SomeServiceImpl"/>
    
</beans>

   其他的装配方式有自动化(注解)装配bean(最常用最高效)、Java代码装配bean(用于将第三方库中的组件装配到你的应用中)。

2. bean的作用域

   当通过Spring容器创建一个Bean实例时,不仅可以完成Bean的实例化,还可以通过scope属性,为Bean指定特定的作用域,Spring支持5种作用域。

2.1 singleton(默认实现)

   单例模式,即在整个Spring容器中,只有一个实例。在容器ApplicationContext对象创建时,会创建好所有单例对象,并放到Map中,所以singleton的作用域与容器对象一致。优点是获取对象的速度快,缺点是会占用一定的内存。

<bean id="someService" class="com.lyj.main.service.SomeServiceImpl"/>
<bean id="someService" class="com.lyj.main.service.SomeServiceImpl" scope="singleton"/>
2.2 prototype

   原型模式,每次使用getBean()方法获取bean对象时,都是一个新的实例对象。在调用容器ApplicationContext的getBean()方法时,才进行装配,所以作用域延迟到了使用对象的时候。优点是不占用内存,缺点是获取对象的速度慢。

<bean id="someService" class="com.lyj.main.service.SomeServiceImpl" scope="prototype"/>
2.3 request

   对于每次HTTP请求,都将会产生一个不同的Bean实例。

2.4 session

   对于每个不同的HTTP session,都将产生一个不同的Bean实例。

2.5 globalSession

   类似标准的http session作用域,不过仅仅在基于portlet的web应用当中才有意义。

3. bean的生命始末

   可以为Bean定制对象创建后的初始化行为,也可以为Bean定制销毁前的生命行为,方法原型:

public void methodName(){}
3.1 定制初始化行为(对象创建后调用)

   在配置文件的标签中,增加"init-method"属性,指定初始化方法的名称,可以完成构造方法的功能,例如属性赋值、初始化其他对象等等。一般把构造方法中的耗时操作放到"init-method"中,方便快速创建对象,并调用对象的业务方法(但是业务方法执行还是会在"init-method"后)。

<bean id="someService" class="com.lyj.main.service.SomeServiceImpl" init-method="init"/>
3.2 定制销毁行为(对象销毁前调用)

   在配置文件的标签中,增加"destroy-method"属性,指定销毁处理方法的名称。一般用于清除对象,释放内存。(注意:Bean对象必须为单例的,因为只有是单例的,容器在关闭时才能找到该对象)

<bean id="someService" class="com.lyj.main.service.SomeServiceImpl" destroy-method="tearDown"/>

   Demo的完整调用代码:

// 配置文件路径
String configLocation = "applicationContext.xml";
// 创建容器对象
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
// 获取bean对象
SomeService someService = (SomeService) context.getBean("someService");
// 调用对象的业务方法
someService.doSome();
// 关闭容器
((ClassPathXmlApplicationContext)context).close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值