锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官!接下来的是今日的面试题:
1、什么是 Spring 的依赖注入?
平时的 java 开发中,程序员在某个类中须要依赖其它类的办法,则通常是 new 一个依赖类再调用类实例的办法,这种开发存在的问题是 new 的类实例不好对立治理,spring 提出了依赖注入的思维,即依赖类不禁程序员实例化,而是通过 spring 容器帮咱们 new 指定实例并且将实例注入到须要该对象的类中。依赖注入的另一种说法是“管制反转”,艰深的了解是:平时咱们 new 一个实例,这个实例的控制权是咱们程序员,而管制反转是指 new 实例工作不禁咱们程序员来做而是交给 spring 容器来做。
2、有哪些不同类型的依赖注入形式?
Spring 提供了多种依赖注入的形式。
1.Set 注入
<!--配置bean,配置后该类由spring治理--> <bean name="springAction" class="com.bless.springdemo.action.SpringAction"> <!--依赖注入,配置以后类中相应的属性--> <property name="springDao" ref="springDao"></property> </bean> <bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl"></bean>
2.结构器注入
<!--配置bean,配置后该类由spring治理--> <bean name="springAction" class="com.bless.springdemo.action.SpringAction"> <!--创立结构器注入,如果主类有带参的构造方法则需增加此配置--> <constructor-arg ref="springDao"></constructor-arg> <constructor-arg ref="user"></constructor-arg> </bean> <bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl"></bean> <bean name="user" class="com.bless.springdemo.vo.User"></bean>
3.动态工厂的办法注入
<!--配置bean,配置后该类由spring治理--> <bean name="springAction" class="com.bless.springdemo.action.SpringAction" > <!--应用动态工厂的办法注入对象,对应上面的配置文件)--> <property name="staticFactoryDao" ref="staticFactoryDao"></property> </property> </bean> <!--此处获取对象的形式是从工厂类中获取静态方法--> <bean name="staticFactoryDao" class="com.bless.springdemo.factory.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean>
4.实例工厂的办法注入
<!--配置bean,配置后该类由spring治理--> <bean name="springAction" class="com.bless.springdemo.action.SpringAction"> <!--应用实例工厂的办法注入对象,对应上面的配置文件--> <property name="factoryDao" ref="factoryDao"></property> </bean> <!--此处获取对象的形式是从工厂类中获取实例办法--> <bean name="daoFactory" class="com.bless.springdemo.factory.DaoFactory"></bean> <bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>
3、什么是 Spring beans?
Spring beans 是那些造成 Spring 利用的骨干的 java 对象。它们被 Spring IOC 容器初始化,拆卸,和治理。这些 beans 通过容器中配置的元数据创立。比方,以 XML 文件中<bean/> 的模式定义。Spring 框架定义的 beans 默认都是单例 beans。
4、一个 Spring Beans 的定义须要蕴含什么?
一个 Spring Bean 的定义蕴含容器必知的所有配置元数据,包含如何创立一个 bean,它的生命周期详情及它的依赖。
5、你怎么定义类的作用域?
当定义一个<bean> 在 Spring 里,咱们还能给这个 bean 申明一个作用域。它能够通过 bean 定义中的 scope 属性来定义。如,当 Spring 要在须要的时候每次生产一个新的 bean 实例,bean 的 scope 属性被指定为 prototype。
另一方面,一个 bean 每次应用的时候必须返回同一个实例,这个 bean 的 scope 属性必须设为 singleton。
6、Spring 反对的几种 bean 的作用域?
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。
7、Spring 框架中的单例 bean 是线程平安的吗?
不是线程平安的。
8、什么是 Spring 的外部 bean?
当一个 bean 仅被用作另一个 bean 的属性时,它能被申明为一个外部 bean,为了定义 inner bean,在Spring 的 基于 XML 的 配置元数据中,能够在 <property/>或 <constructor-arg/> 元素内应用<bean/> 元素,外部 bean 通常是匿名的,它们的 Scope 个别是 prototype。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person2" class="com.itdjx.spring.dependency.injection.Person"> <property name="name" value="李玉"/> <property name="age" value="23"/> <property name="sex" value="女"/> <property name="car" > <bean class="com.itdjx.spring.dependency.injection.Car"> <constructor-arg value="Ferrari" index="0"/> <constructor-arg value="Italy" index="1"/> <constructor-arg value="22500000" type="double"/> </bean> </property> </bean></beans>
更多面试题可关注"demo锁屏面试题"公众号通过小程序或App学习面试题