Spring6

输入密码 · 语雀

1、OCP、DIP原则概述 

 2、控制反转(一种新型的思想)

 3、Spring框架、DI(依赖注入)

 4、OCP、DIP、Ioc、DI术语

5、顶级面试题BeanFactory和FactoryBean的区别

6、Bean的生命周期

 最低要求要记住这7步,如果可以要记住10步

6.0 bean生命周期之5步

6.1 bean生命周期之7步

1、实例化bean

2、给bean属性赋值

3、处理bean后处理器的before方法

4、init实例化bean

5、处理bean处理器的after方法

6、使用bean

7、销毁bean

6.2 bean声明周期之10步

 

 6.3 bean声明周期点击概述

 7、自己创建的对象怎么交给spring管理

    @Test
    public void testCustomerBean(){
        Student student = new Student();
        System.out.println(student);
        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        factory.registerSingleton("studentBean",student);
        Object studentBean = factory.getBean("studentBean");
        System.out.println(studentBean);
    }

8、单例、原型、setter注入、construct(构造)注入循环依赖问题

8.1在singleton+setter模式下,为什么循环依赖没有问题,Spring是如何进行管理的?

    <!--singleton + setter模式下循环依赖没有任何问题-->
    <!--singleton 表示在整个Spring容器当中是单例的,独一无二的对象-->
    <!--
        在singleton+setter模式下,为什么循环依赖没有问题,Spring是如何进行管理的?
        主要的原因是,在这种模式下Spring对Bean的管理主要分为清晰的两个阶段。
        第一个阶段:在Spring容器加载的时候,实例化bean,其中只要一个bean实例化完成,马上进行曝光。其中bean需要全部曝光
        第二个阶段:Bean曝光之后,再进行属性赋值(调用set方法)
        核心解决方案是,实例化对象和对象的属性赋值分为两个阶段来完成的
        只有bean是singleton的模式下,bean才会采取提前曝光的方式
    -->
    <bean id="huahandBean" class="com.powernode.spring6.bean.Huahand" scope="singleton">
        <property name="name" value="小马"></property>
        <property name="wife" ref="wifeBean"></property>
    </bean>
    <bean id="wifeBean" class="com.powernode.spring6.bean.Wife">
        <property name="name" value="小红"></property>
        <property name="huahand" ref="huahandBean"></property>
    </bean>

 8.2在prototype+setter模式下,循环依赖有问题,Spring是如何进行管理的?

<!--    1、报异常BeanCurrentlyInCreationException 因为bean的范围是原型(多例),即就是一开始并不会实例bean,只有调用你需要bean的时候才会实例化bean。
        2、当huahandBean需要wifeBean,wifeBean会创建出来。wifeBean创建出来,wifeBean又需要huahandBean,huahandBean又会重新创建出来。创建出来的都是全新的
         bean.这样就会陷入了无限的死循环。
        3、prototype + prototype + setter会陷入循环依赖
            singleton + prototype + setter不会陷入循环依赖
-->
    <bean id="huahandBean" class="com.powernode.spring6.bean.Huahand" scope="prototype">
        <property name="name" value="小马"></property>
        <property name="wife" ref="wifeBean"></property>
    </bean>
    <bean id="wifeBean" class="com.powernode.spring6.bean.Wife" scope="prototype">
        <property name="name" value="小红"></property>
        <property name="huahand" ref="huahandBean"></property>
    </bean>

8.3在singleton+construct模式下,循环依赖有问题,Spring是如何进行管理的?

构造方法注入,就是在创建实例化的过程程中注入属性。两个bean的构造注入,互相依赖对方的创建完成。所以会产生类似死锁的局面

 9、Spring循环依赖之源码分析

先从一级缓存里面取bean。如果一级缓存返回bean为空,就去二级缓存取。如果二级缓存返回bean为空,就去三级缓存取,三级缓存获取到的是创建该bean的工厂对象,获取到了的话,就会创建bean的实例对象,放到二级缓存中。


10、SpringAOP专业术语

11、Spring中事务的应用

首先如果需要开启事务注解@Transactional,但是要使用这个注解,需要在配置文件里面做以下事情

第一步:配置事务管理器

第二步:开启事务注解

<!--    配置事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!--   开启事务注解驱动器,开启事务注解-->
    <tx:annotation-driven transaction-manager="txManager"/>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值