Spring中的Bean

SpringBean的作用域:
Singleton 单例模式,Spring IOC容器只会存在一个共享的Bean实例。
Prototype 原型模式,(多例模式),每次getBean都会实例化一个新的对象
范围 描述
Singleton (默认值)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例。
prototype 将单个bean定义的作用域限定为任意数量的对象实例。
request 将单个bean定义的范围限定为单个HTTP请求的生命周期。也就是说,每个HTTP请求都有一个在单个bean定义的后面创建的bean实例。
session 将单个bean定义的范围限定为HTTP的生命周期Session。
application 将单个bean定义定位到ServletContext的生命周期。
websocket 将单个bean定义的作用域限定为的生命周期WebSocket。

请求,会话,应用程序和WebSocket范围
在request,session,application,和websocket范围只有当你使用一个基于web的Spring可ApplicationContext实现(例如 XmlWebApplicationContext)。如果您将这些作用域与常规的Spring IoC容器一起使用,例如ClassPathXmlApplicationContext,IllegalStateException则会引发报错未知bean作用域的。

@RequestScope
@SessionScope
@ApplicationScope

自定义Bean的性质

初始化回调
org.springframework.beans.factory.InitializingBean容器在bean上设置了所有必需的属性后,该接口使bean可以执行初始化工作。该InitializingBean接口指定一个方法:
void afterPropertiesSet() throws Exception;

public class AnotherExampleBean implements InitializingBean {

@Override
public void afterPropertiesSet() {
    // do some initialization work
}

}

  xml方式

public class ExampleBean {

public void init() {
    // do some initialization work
}

}

销毁回调
org.springframework.beans.factory.DisposableBean当包含该接口的容器被销毁时,实现该接口可使Bean获得回调。该 DisposableBean接口指定一个方法:
void destroy() throws Exception;

public class AnotherExampleBean implements DisposableBean {

@Override
public void destroy() {
    // do some destruction work (like releasing pooled connections)
}

}

  xml方式

public class ExampleBean {

public void cleanup() {
    // do some destruction work (like releasing pooled connections)
}

}

启动和关闭回调
Lifecycle接口为任何有自己生命周期需求的对象定义了基本方法(例如启动和停止某些后台进程):
public interface Lifecycle {

void start();

void stop();

boolean isRunning();

}

任何spring管理的对象都可以实现生命周期接口。然后,当ApplicationContext本身接收到启动和停止信号(例如,对于运行时的停止/重启场景)时,它将这些调用级联到该上下文中定义的所有生命周期实现。它通过委托给LifecycleProcessor来实现这一点,如下所示:
public interface LifecycleProcessor extends Lifecycle {

void onRefresh();

void onClose();

}

SmartLifecycle定义的stop方法接受回调。任何实现都必须在该实现的关闭过程完成后调用该回调函数的run()方法。这将在必要时启用异步关闭,因为LifecycleProcessor接口的默认实现DefaultLifecycleProcessor等待每个阶段内的对象组的超时值来调用回调。默认的每个阶段超时时间是30秒。您可以通过在上下文中定义一个名为lifecycleProcessor的bean来覆盖默认的lifecycle processor实例。如果你只想修改超时,那么定义如下就足够了:



ApplicationContextAware and BeanNameAware
当ApplicationContext创建一个实现了org.springframework.context的对象实例时。ApplicationContextAware接口,为实例提供了对该ApplicationContext的引用。下面的清单显示了ApplicationContextAware接口的定义:
public interface ApplicationContextAware {

void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

}

当ApplicationContext创建一个实现了org.springframework.beans.factory的类时。在BeanNameAware接口中,向类提供了对其关联对象定义中定义的名称的引用。下面的清单显示了BeanNameAware接口的定义:
public interface BeanNameAware {

void setBeanName(String name) throws BeansException;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值