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面试中常见的知识点,包括Spring的优点、DI(Dependency Injection)的实现方式、IOC(Inversion of Control)的理解、Spring对ORM框架如Hibernate的支持,以及Spring的事务管理。 首先,...
**Spring框架概述** Spring是一个全面的Java应用开发框架,它为构建企业级...通过阅读"面试突击班-spring专题.md"和"0303谈谈Spring IOC的理解,原理与实现.md",可以进一步深化对Spring的理解,为面试做好充分准备。
java面试-Java+最常见的+200++面试题汇总+答案总结汇总 java面试-Java并发编程最全面试题 123道 java面试-Java集合框架常见面试题 java面试-Java虚拟机(JVM)面试题 51道 java面试-Kafka知识汇总 18道 java面试-...
标题为"Spring面试题总结"的文档是一份专门针对程序员在应聘与Spring相关职位时可能会遇到的技术面试题的整理和总结。Spring作为一个企业级Java应用框架,已经成为业界使用最为广泛的框架之一,对于期望从事Java后端...
例如,spring-boot-starter-web包含了用于Web开发的必需依赖项,spring-boot-starter-data-jpa则包含了用于JPA持久化操作的依赖项。 Starters的命名遵循一个统一的格式:spring-boot-starter-,后接特定的功能名称...
以上只是Spring面试题的一部分,实际面试可能会涉及更多细节,例如Spring Boot的 profiles、Spring Cloud的数据治理、Spring Boot的DevTools等。深入理解Spring框架的原理和实践,将有助于你在面试中脱颖而出。
含JAVA基础学习,面试题,和前辈们的面试经验总结,Spring---SpringMVC---MyBatis---Spring Boot mysql---redis---tomcat---git---mqtt --- Lombok插件等等当前流行技术,还包含大牛们的项目git地址,可以直接打开...
SpringCloud微服务面试总结
8. **设计模式**:设计模式是软件工程的实践经验总结,如单例模式、工厂模式、观察者模式等,熟练运用设计模式可以提高代码的可读性和可维护性。 9. **框架应用**:如Spring框架的IoC和AOP原理,MyBatis的映射机制...
Spring使用与实现总结.pdf Spring源码解析.pdf Tomcat源码解析.pdf 面试---1. Java&设计模式.pdf 面试---2. Java集合.pdf 面试---3. Java并发.pdf 面试---4. JVM&Linux.pdf 面试---5. JavaWeb&HTTP&安全&Git...
在面试中,理解Spring的核心概念和技术是至关重要的。以下是对Spring框架的一些关键知识点的详细说明: 1. 反转控制与注入: Spring的核心特性之一是反转控制(IoC),它通过容器管理对象的生命周期和依赖关系。在...
这份“java面试必问面试宝典--千方百计”很可能是总结了众多面试者的经验,包含了Java核心技术、面试技巧以及应对策略。以下是一些可能涵盖的知识点: 1. **Java基础知识**: - Java语法:类、对象、封装、继承、...
本文将深入探讨2013年Spring面试中的关键知识点。 首先,我们来理解控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)。IoC意味着不再由对象自己创建和管理依赖关系,而是将这个责任...
Spring Batch 是一个...总结来说,"spring-batch 分区处理示例"展示了如何利用Spring Batch的强大功能来处理大规模数据。通过理解并应用这个示例,开发者可以更好地掌握批量数据处理的优化策略,提高应用程序的性能。
Spring常见面试题总结
- **Core Container**:核心容器,由spring-core、spring-beans、spring-context和spring-expression组成,其中: - spring-core:提供核心工具类。 - spring-beans:负责Bean的创建和管理,实现IoC和DI。 - ...
spring面试题总结,spring面试题总结,spring面试题总结,spring面试题总结