spring面试题

Spring常见面试题

  1. 什么是spring?
    Spring是一个开源的分层的javaSE/javaEE的一站式的轻量级的解决方案。[容器框架]

  2. 使用Spring框架的好处是什么?
    作用:解决业务逻辑层【Service】与web层和数据访问层之间的松耦合问题。

  3. Spring由哪些模块组成?
    在这里插入图片描述

  4. 什么是BeanFactory ? BeanFactory 实现举例。
    BeanFactory接口表示一个Spring工厂对象【Spring容器对象】,包含了实例化好的java类对象。【管理】
    BeanFactory接口有一个常用的子接口ApplicationContext接口,我们通常使用ApplicationContext接口充当Spring工厂对象【Spring容器对象】。
    1.ClassPathXmlApplicationContext类 – new ClassPathXmlApplicationContext()可以创建出BeanFactory接口对象/ApplicationContext对象
    表示:通过查找类路径加载一个Xml文件创建Spring工厂对象
    2. FileSystemXmlApplicationContext类 —new FileSystemXmlApplicationContext可以创建出BeanFactory接口对象/ApplicationContext对象
    表示:通过在系统文件类路径中加载一个Xml文件创建Spring工厂对象

BeanFactory接口—Spting容器—用来保存和维护Spring创建的对象【管理】
FactoryBean接口-------------------用来创建java对象【创建】

  1. 解释AOP模块
    spring-aop:面向切面编程
    spring-aspects:集成AspectJ
    spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器spring-instrument-tomcat:针对tomcat的instrument实现
    它们的依赖关系
    在这里插入图片描述

6.Spring配置文件?
名称:推荐使用applicationcontext.xml
位置:一般都在resources目录中

<!-- 配置bean -->
        <!-- 通知Sping容器创建类对象 -->
        <!--class属性:指定创建对象的java类【包名+类名】-->
        <!--id属性:指定对象名称-->
  1. 什么是Spring IOC 容器?
    IoC(Inverse of Control 反转控制): 将java对象创建和维护权利交由Spring工厂进行管理和维护。
  2. IOC的优点是什么?
    java对象创建和维护权利交由Spring工厂进行管理和维护。
  3. ApplicationContext通常的实现是什么?
    1.ClassPathXmlApplicationContext类 – new ClassPathXmlApplicationContext()可以创建出BeanFactory接口对象/ApplicationContext对象
    表示:通过查找类路径加载一个Xml文件创建Spring工厂对象
  4. FileSystemXmlApplicationContext类 —new FileSystemXmlApplicationContext可以创建出BeanFactory接口对象/ApplicationContext对象
    表示:通过在系统文件类路径中加载一个Xml文件创建Spring工厂对象
  5. BeanFactory和 Application contexts 有什么区别?
    ApplicationContext接口这是Spring工厂对象是BeanFactory接口的子接口。
  6. BeanFactory和 FactoryBean 有什么区别?
    BeanFactory接口—Spting容器—用来保存和维护Spting创建的对象【管理】
    FactoryBean接口-------------------用来创建java对象【创建】
    12.什么是Spring的依赖注入?
    依赖注入–在调用者类中将被调用者类的对象,添加到调用者类中这个过程就是依赖注入。
    在这个过程中被调用者类的对象就是调用者类的依赖对象。
    13.Sprting的自动装配策略?
    在这里插入图片描述

14.有哪些不同类型的DI(依赖注入)方式?
1.基于XML的依赖注入
1.构造方法注入
2.Set方法注入
2.自动注入[自动装配策略]
3.基于注解注入
15.解释Spring支持的几种bean的作用域
singleton: 单例模式【在一个spring容器中,对象只有一个实例。(默认值)】
prototype:多例模式/原型模式【在一个spring容器中,存在多个实例,每次getBean 返回一个新的实例。】
request:该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。【一次请求一个对象】
session:该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。【同一次回话中的对象都是相同的】
global session:该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。【多个session共享一个对象】
15. 哪些是重要的bean生命周期方法? 你能重载它们吗?
Spring工厂对象【Spring容器对象】负责创建对象,初始化对象,销毁对象。

<!-- 无参数构造方法实例化bean的配置 -->
	<!-- id:对象名称 -->
	<!-- class:被创建对象的java类的包名+类名 -->
	<!-- init-method:配置对象的初始化方法 -->
	<bean id="student" class="com.click369.javabean.StudentBean" init-method="initStudentBean"></bean>

<!-- 无参数构造方法实例化bean的配置 -->
	<!-- id:对象名称 -->
	<!-- class:被创建对象的java类的包名+类名 -->
	<!-- init-method:配置对象的初始化方法 -->
<!-- destroy-method:配置对象的销毁方法 -->
<bean id="student" class="com.click369.javabean.StudentBean" init-method="initStudentBean"  destroy-method="destroyStudentBean"></bean>

16.在 Spring中如何注入一个java集合?

<!-- 创建StudentBean对象,并通过set方式为集合型成员变量赋初始值-->
	<bean id="student" class="com.click369.javabean.StudentBean">
	  <!-- 数组 -->
	  <property name="stringArray">
	     <array>
	        <value>zhangsan</value>
	        <value>lisi</value>
	        <value>wangwu</value>
	     </array>
	  </property>
	  <!-- list -->
	  <property name="stringList">
	     <list>
	        <value>西安</value>
	        <value>北京</value>
	        <value>上海</value>
	     </list>
	  </property>
	  <!-- set -->
	  <property name="stringSet">
	     <set>
	        <value>javaSE</value>
	        <value>javaEE</value>
	        <value>javaME</value>
	     </set>
	  </property>
	  <!-- Map -->
	  <!-- key属性的值不能是key -->
	  <!-- value属性的值不能是value -->
	  <property name="stringMap">
	     <map>
	       <entry key="age">
	            <value>23</value>
	       </entry>
	       <entry key="height" value="167.5"></entry>
	       <entry key="sex" value="男"></entry>
	     </map>
	  </property>
	  <!-- properties -->
	  <property name="myProperties">
	      <props>
	         <prop key="mydirver">com.mysql.jdbc.Driver</prop>
	         <prop key="myusername">root</prop>
	         <prop key="mypassword">123456</prop>
	      </props>
	  </property>
	</bean>
</beans>	

17.怎样开启Spring注解装配?

<!-- 开启注解功能 -->
<context:annotation-config/> 
<!-- 配置Spring自动扫描包 -->
<context:component-scan base-package="com.click369.javabean"></context:component-scan>

18.Spring注解@Resource和@Autowired区别对比
1、共同点
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
2、不同点
(1)@Autowired
@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入

(2)@Resource
@Resource()默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
19.Spring支持的事务管理类型
1.编程式事务管理—手动编写大量的java代码实现事务管理
2.声明式事务管理—就是在Spring的配置文件中通过配置实现事务管理
2.1基于xml配置文件
2.2基于注解
20.Spring面向切面编程(AOP)
AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。
AOP 思想: 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码【系统需求方法】,从而对原有业务方法进行增强。
AOP的底层是动态代理机制【CGLIB动态代理】。
基于两种动态代理机制: JDK动态代理和CGLIB动态代理。
JDK动态代理:基于接口的代理,会生成目标对象的接口的子对象【实现接口的类】
CGLIB动态代理:基于类的代理,会生成目标对象的子对象。【无论是继承父类还是实现接口所产生的类】
基于XML文件的AOP实现

<aop:config>
		<aop:pointcut expression="execution(* com.click369.service.impl.UserServiceImpl.insertService(..))" 
					  id="point1"/>
		<aop:pointcut expression="execution(* com.click369.service.impl.UserServiceImpl.updateService(..))" 
					  id="point2"/>
		<aop:pointcut expression="execution(* com.click369.service.impl.UserServiceImpl.deleteService(..))" 
					  id="point3"/>		  
		<aop:aspect ref="myAvice">
			<aop:before method="savaLog" pointcut-ref="point1"/>
			<aop:after-returning method="savaLog" pointcut-ref="point2"/>
			<aop:around method="around" pointcut-ref="point3"/>
		</aop:aspect>
	</aop:config>

基于注解的Aop实现

@Aspect
@Before("execution(* com.click369.service.impl.UserServiceImpl.insertService(..))")
@AfterReturning("execution(* com.click369.service.impl.UserServiceImpl.updateService(..))")
@Around("execution(* com.click369.service.impl.UserServiceImpl.deleteService(..))")
<!-- 开启aop注解  -->
<aop:aspectj-autoproxy />

21.在Spring AOP 中,关注点和横切关注的区别是什么?
poingcut(切入点):对哪些连接点进行拦截的定义。在Spring中指的真正需要被代理(增强)的方法。
22.IoC 和 DI的区别?
IoC(Inverse of Control 反转控制): 将java对象创建和维护权利交由Spring工厂进行管理和维护。
依赖注入–在调用者类中将被调用者类的对象,添加到调用者类中这个过程就是依赖注入。
在这个过程中被调用者类的对象就是调用者类的依赖对象。
依赖注入是基于IoC(Inverse of Control 反转控制)。
23.spring配置bean实例化有哪些方式?
1.1无参数构造方法(开发最常用)
1.2静态工厂方法实例化bean
1.3实例工厂方法实例化bean
1.4FactoryBean接口方式实例化bean
24.Spring的核心类有哪些,各有什么作用?
BeanFactory接口
ApplicationContext接口
ClassPathXmlApplicationContext类
FileSystemXmlApplicationContext类
FactoryBean接口
25.Spring里面applicationContext.xml文件能不能改成其他文件名?
可以,你在web.xml 配置

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext*.xml <!-- spring bean文件所在路径 -->
</param-value>
</context-param>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值