以面试的形式谈谈:对spring的ioc的理解及相关的注解整理?

假装我是面试官,看到你的简历中写了熟悉spring框架,spring mvc,spring boot等等,那么先来问问spring相关的吧。


1.聊聊你对spring框架的认识?

spring框架是一种轻量级的开源框架,也就是spring framework主要用于Java企业级应用的开发,其核心为Ioc控制反转和Aop面向切面编程。spring框架还支持很多第三方框架,让开发者能够方便地组合使用各种框架。


2.Ioc控制反转是什么意思?为什么要进行这样的“控制反转”?

控制反转:将对对象的创建的控制交给了ioc容器,而不是原先由代码写死到什么地方new某个对象。我们可以通过xml配置文件或者通过注解的方式来告诉容器,要创建怎样的对象。

进行控制反转的原因:为了降低代码的耦合。



3.详细说一说在实际中如何实现ioc?

(1)xml配置文件

         a.创建一个配置文件,例如bean.ml文件

            创建bean的第一种:指定id和class,利用该类的空参构造器创建:


    
    

           创建bean的第二种:指定工厂类,和工厂类中的方法来创建:

            三要素:id,factory-bean,factory-method


    
    
    
     
    

    b.创建可以读该配置文件的容器---ClassPathXmlAplicationContext

ApplicationContext  context = new ClassPathXmlApplicationContext("bean.xml");

   c.从容器中再去拿bean

Student student1 = (Student)context.getBean("student");

(2)通过注解

利用@Component,@Service,@Controller,@Repository基础注解,配合@Autowired,@Qualifier,@Value等等注解创建bean并为bean的属性赋值。

然后通过容器读这些注解:

Application context = new AnnotationConfigApplicationContext(配置类.class);

4.bean的作用范围有哪些?

默认情况下,bean的作用范围是单例的,也就是说该类的对象只会有一个,在各处调用时,使用的都是同一个对象。

也能通过配置文件 scope = "prototype"或者注解@Scope("prototype")改成多例的,也就是每次调用的时候都会重新创建一个对象。

还有基于每次request的,基于session的等等。


5.什么时候用单例什么时候用多例呢?

用单例的场景:

a.当某个对象的创建过程消耗很多,(耗时/耗资源)时;

b.当一个对象的属性需要被全局共享进行修改时;

用多例的场景:

a.每次使用时希望互相不产生干扰时;


6.单例模式具体怎么实现?有其他实现吗?

单例模式主要有两种实现:懒汉式、饿汉式

懒汉式:当调用时,进行对象的创建;

饿汉式:对象提前创建好,当调用时,立即返回该对象供使用;


7.bean的生命周期如何呢?

单例对象的生命周期是跟随容器的,只要容器在,单例对象就会在,当容器关闭时,单例对象就死亡;

多例对象在被使用时创建,由于不确定何时会再被使用,所以和容器是否开启没什么关系,多例对象的死亡时间由jvm的垃圾回收机制来确定。


 

你可能感兴趣的:(Java,面经)