【Spring】初阶二

Bean作用域

作用域描述
singleton在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认的作用域
prototype每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()
request每次HTTP request都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
global-session一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境
  • 当作用域为singleton时,IOC容器只会存在一个共享的实例,每次获取到的对象都是同一个对象
  • Prototype在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,因此我们每次获取到的对象都不是同一个对象

设置作用域

@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)//将作用域设定为prototype
//@Scope("prototype")
public class MassageService {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

使用@Scope注解来设置作用域

a.

在这里插入图片描述

b.

@Scope("prototype")

在spring boot里面,使用@Configuration(proxyBeanMethods = " ") 来设置作用域

proxyBeanMethods = true:单例模式

proxyBeanMethods = false:多例模式

Bean生命周期

这里的生命周期针对的是singleton Bean

在这里插入图片描述

(图源网络)

  1. 启动Spring,查找并加载需要被Spring管理的bean,进行Bean的实例化
  2. Bean实例化后进行属性注入
  3. 如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。
  4. 如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
  5. 如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来
  6. 如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
  7. 如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
  8. 如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
  9. Bean被使用,直到应用上下文被销毁
  10. 如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。

FactoryBean接口

FactoryBean是一个接口,需要创建一个类实现该接口

FactoryBean里面有三个方法:

getObject( ):通过一个对象交给IOC容器管理

getObjectType():设置所提供对象的类型

isSingleton():所提供的对象是否为单例

当把FactoryBean的实现类配置为bean时,会将当前类中getObject( )所返回的对象交给IOC容器管理。后期在SqlSessionFactory中会经常用到这种原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值