spring在面试中经常被问到,尤其是IOC与AOP.
我们在项目中经常用到spring的相关功能是IOC、AOP、事务管理、定时调度、spring security。
1、IOC用于实现实例的动态注入,管理bean,从而在需要实例的时候不是主动new,而是从IOC容器中去取。利用java的反射机制来实现的。
2、AOP是面向切面编程,主要涉及的概念有切点、切面、增强。以零侵入的形式织入增强逻辑。主要应用有声明式事务的管理、监控等。
主要有java动态代理和cglib字节码增强两种方式实现。
a. java动态代理在生成对象的时候效率较高,但是被增强的类要实现接口,这里就是用到了代理模式,动态代理生成的接口实现类在运行的过程中实际上去调用代理类的方法。
b.cglib字节码增强的方式在方法调用的时候效率较高,但是cglib字节码增强技术在对目标类进行增强的时候是继承增强类的,在重写父类方法的时候进行了前后增强。
因为在应用中方法调用的次数远高于生成对象的次数,因此,spring的AOP模式实现方式是利用cglib的形式实现的。实现接口和继承类都有各自的优缺点,java动态代理时(实现接口),被代理的类中的私有方法不能被增强,cglib字节码增强时(继承类),私有方法和final方法不能被增强。
3、事务管理,应用的开发过程中,由于业务要求,都会引入事务,事务的ACID特性来保证业务的完整性与一致性。spring利用底层数据库事务的支持来实现事务管理。
4、定时调度,用来实现定时任务,比如说,凌晨两点下载文件或者进行对账等操作,这就需要定时任务来实现,spring在这里封装了quartz来实现定时调度。
5、spring security是用来进行权限认证,保证系统的安全性,理论原理是基于用户-角色-组的权限控制。我们可视化的功能就是用户登录功能的实现。还有就是某些页面只有某些人能看见。
上面大概讲述了面试中遇见的问题,如下问题在实际项目中经常遇见,一般关注度很小,但是意义很大。
1、事务隔离级别与事务传播机制,spring中事务隔离级别有:read_uncommited、read_commited、repeatable_read、serializable,一般都是设置为read_commited,来防止脏读。这里提一下:数据库读写一般会产生五类问题:脏读、重复读、幻读、第一类更新丢失、第二类更新丢失。
2、父子容器的关系,spring中常见的父容器有spring容器,子容器有spring mvc容器,因为父容器中的bean无法访问自容器中的bean,因此,在进行配置文件配置的时候,需要注意。一般讲service、dao配置在spring容器中,讲controller配置在spring mvc容器中,这样子容器中的controller就可以读取到父容器中的service和dao了。有时候如果将service配置在spring mvc容器中,会导致一些bean的注入失败,这问题的原因很难发现。
下面讲解一下spring的配置:
1、applicationContext.xml是用来进行配置service、dao、数据源事务传播机制和隔离级别等内容的。
2、dispatcher-servlet.xml用来进行spring mvc方面的配置的,比如说,controller扫描注入、视图解析、前后缀等的配置。
3、web是用来指定spring配置文件和spring mvc配置文件,并制定启动顺序的。
内容为:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.form</url-pattern> </servlet-mapping> </web-app>
ContextLoaderListener的功能就是监听web容器的启动和停止的,当监听到web容器启动时,就启动spring 容器;当监听到web容器停止时,就停止spring容器。当监听到web容器启东时,就根据如下配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param>
将spring配置加载进内存,根据applicationContext.xml的配置,加载bean及bean之间的依赖关系。
spring mvc容器的配置如下:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.form</url-pattern> </servlet-mapping>
DispatcherServlet用来转发请求和响应的,上述这样配置就指定了一个默认的配置文件dispatcher-servlet.xml来配置spring mvc的内容了,可以指定spring mvc的配置文件,如下:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.form</url-pattern> </servlet-mapping>
spring的内容有很多,我知之甚少,《spring 3.x企业应用开发实战》这本书很好。我们共勉,共同学习。
相关推荐
面试知识点总结--spring面试题大全.pdf
面试知识点总结--Spring 应用框架技术.pdf
【框架类面试题】-Spring面试题总结
java面试-Java+最常见的+200++面试题汇总+答案总结汇总 java面试-Java并发编程最全面试题 123道 java面试-Java集合框架常见面试题 java面试-Java虚拟机(JVM)面试题 51道 java面试-Kafka知识汇总 18道 java面试-...
Struts Hibernate Spring 面试 总结 Struts Hibernate Spring 面试 总结 Struts Hibernate Spring 面试 总结
struts spring hibernate 面试总结
含JAVA基础学习,面试题,和前辈们的面试经验总结,Spring---SpringMVC---MyBatis---Spring Boot mysql---redis---tomcat---git---mqtt --- Lombok插件等等当前流行技术,还包含大牛们的项目git地址,可以直接打开...
Spring面试题总结
SpringCloud微服务面试总结
2013年的Spring面试总结,Java程序员面试必备知识点!
Spring使用与实现总结.pdf Spring源码解析.pdf Tomcat源码解析.pdf 面试---1. Java&设计模式.pdf 面试---2. Java集合.pdf 面试---3. Java并发.pdf 面试---4. JVM&Linux.pdf 面试---5. JavaWeb&HTTP&安全&Git...
Spring常见面试题总结
2020面试题总结Spring篇.pdf
spring面试题总结,spring面试题总结,spring面试题总结,spring面试题总结
JAVA面试总结Spring,SpringBoot,Git原理
Spring和SpringMVC面试问题总结 1.Spring中AOP的应用场景、Aop原理、好处? 2.Spring中IOC的作用与原理?对象创建的过程。 3.介绍spring框架 4.Spring常见创建对象的注解? 5.Spring中用到的设计模式 6.Spring的优点...
本个工作7年经验,总结出的spring面试宝典,一般工作1年到5年左右面试的人 只要面试SPRING都不会离开这里面的内容,供大家学习
spring复习面试个人总结题集
spring +hibernate+struts面试总结
java培训班时,老师针对spring框架总结的资料,知识点内容全面。