首页 > 其他 > 详细

面试题1月3日-积累篇(2020年)

时间:2020-01-03 11:34:07      阅读:74      评论:0      收藏:0      [点我收藏+]

1、BeanFactory和ApplicationContext有什么区别?

答:什么是SpringBeans,这是一个非常简单又很复杂的问题,通常来说,Springbeans就是被Spring容器所管理的java对象;什么是Spring容器,Spring负责实例化,配置和装配Spring beans;BeanFactory和ApplicationContext的不同点,BeanFactory接口是一个用来访问Spring容器的接口,要访问Spring容器,我们将使用Spring依赖注入功能,使用BeanFactory接口和它的子接口(特性:Bean的实例化/串联 通常情况下,BeanFactory的实现是使用懒加载的方式,这意味着Beans只有在我们通过getBean()方法直接调用它们时才进行实例化,实现BeanFactory最常用的API是XMLBeanFactory);ApplicationContext接口是Spring应用程序中的中央接口,用于向应用程序提供配置信息,它继承了BeanFactory接口,所以ApplicationContext包含BeanFactory的所有功能以及更多功能!它的主要功能是支持大型的业务应用的创建(特性:Bean instantiation/wiring;Bean的实例化/串联;自动的BeanPostProcessor注册;自动的BeanFactoryPostProcessor注册;方便的MessageSorce访问;ApplicationEvent的发布与BeanFactory懒加载的方式不同,它是预加载,所以,每一个bean都在ApplicationContext启动之后实例化);总的来说ApplicationContext包含BeanFactory的所有特性,通常推荐使用前者。但是也有一些限制情形,比如移动应用内存消耗比较严苛,在那些情景汇总,使用更轻量级的BeanFactory是更合理的。然而在大多数企业级的应用中,ApplicationContext是你的首选。


2、请解释下Spring框架中的IOC

答:Spring底层最核心的就是IOC(Inversion of control 控制反转)又叫DI(Dependecy Injection)了,依赖注入,让一个对象的创建不用在new了,可以自动的生产,这其实就是利用java里的反射在运行时,用Spring的xml配置文件来动态的创建对象和调用对象里的方法。依赖注入的方式有:设值注入(依赖get/set方法)、构造注入(依赖构造方法)、注解注入(@Component[分层不明确的情况下]、@Repository()[Dao层]、@Service()[Service层]、@Controller()[Action类,controller类]、@Scope指定bean作用的范围、@Autowired指定自动装配依赖、@Qualifier用@Autowired自动匹配时,如果有多个同类型对象则需要该注解指定注入Bean的名称、@Resource默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配)。


3、如何用基于Java配置的方式配置Spring?

答:Spring对java配置的支持是由@Configuration注解和@Bean注解来实现的。由@Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IOC容器来管理。@Bean声明所起到的作用与<bean/>元素类似。被@Configuration所注解的类则表示这个类的主要目的是作为bean定义的资源。被@Configuration声明的类可以通过在一个类的内部调研那个@Bean方法来设置嵌入bean的依赖关系。类中的方法名称相当于beans中的id,详情https://blog.csdn.net/weixin_42528266/article/details/102909450


4、Spring Bean的作用域之间有什么区别?

答:singleton : bean在每个Spring ioc 容器中只有一个实例。

  prototype:一个bean的定义可以有多个实例。

  request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

  session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

  global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的作用域是Singleton。详情:https://www.cnblogs.com/hph1728390/p/11005470.html


5、请解释自动装配模式的区别?

答:在Spring框架中共有5种自动装配,让我们逐一分析。

  • no: 这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。
  • byName: 该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
  • byType: 该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
  • constructor: 造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
  • autodetect: 该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。

面试题1月3日-积累篇(2020年)

原文:https://www.cnblogs.com/blackboc-java/p/12143928.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!