• 【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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    a.

    在这里插入图片描述

    b.

    @Scope("prototype")
    
    • 1

    在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中会经常用到这种原理

  • 相关阅读:
    IF 19.865代谢组学高分文章,非靶标代谢流助力揭示18SrRNA中m6A控制肝癌机制!
    AJAX——事件循环(EventLoop)
    【20221105】【每日一题】删除二叉搜索树中的节点
    2022 CSP-J 复赛题解
    vue前后端分离单点登录,结合长token和短token进行登录
    集团建筑公司安全风险调度数字化管理系统
    Smart Link 和 Monitor Link应用
    App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
    ASIFT算法过程实现 --- 配置避坑指南
    spring Environment上下文环境参数变量
  • 原文地址:https://blog.csdn.net/qq_51452131/article/details/127742288