您的位置:首页 > 编程语言 > Java开发

Spring 面试问题

2016-10-25 09:26 113 查看


Spring

1、为什么要用Spring?

1:降低组件之间的耦合度,实现软件各层之间的解耦

Controller->Service->DAO
2:可以使用容器提供的众多服务。如: 

–事务管理服务 

–消息服务,JMS 

–Spring core核心服务 

–持久化服务
3:提供了AOP技术。实现如:权限拦截,事务管理,日志管理等功能 

4:提供了众多的辅助类。如JDBC Template,HIbernate Template 

5:对主流的应用框架提供了集成支持。集成Struts2,JPA,Mybatis,Hibernate
2、请你聊一聊IOC/DI?

1、IOC控制反转,DI依赖注入

2、通常对象在使用依赖对象时,在对象的内部直接new一个依赖对象,这样对象间的耦合度高了,可以通过IOC降低对象间的耦合度,由Spring容器来负责控制对象的生命周期和对象间的关系。
3. 什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?

声明事务管理主要是将在进行对数据库中数据进行添加或者修改的时候需要执行事务管理。主要是避免在执行数据修改和添加的时候数据添加或者修改不完全,导致数据丢失。
Spring的声明式事务治理的底层是建立在 AOP 的基础之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加进一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。使用声明式的事务治理可重用性高。
4. 把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操纵之外的方法,即主要执行查询任务的方法定义为read-only?
因为添加和删除和更新都涉及到数据库的修改,而查询并未涉及数据修改,所以只需要定义只读,这样可以提高效率,进行更加方便的事务管理。而事务管理主要是为添加和删除和更新设计的。
5.请你聊一聊AOP?
AOP,面向切面编程,就是把通用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中,AOP并没有帮助我们解决任何新的问题,它只是提供了一种思想,用更少的工作量来解决现有的一些问题,使系统更稳健。
AOP有三种植入切面的方法:

1.编译期织入,要求使用特殊的Java编译器,比较AspectJ;

2.类装载期织入,要求使用特殊的类装载器,比如AspectJ和AspectWerkz;

3.动态代理织入,比如Spring AOP
Spring AOP使用了两种代理机制,一种是基于JDK的动态代理,另一种是基于CGLib的动态代理,JDK只支持接口的代理,不支持类的代理,CGLib不仅支持接口的代理还支持类的代理。
AspectJ支持5种类型的通知注解:

@Before:前置通知,在方法执行之前返回

@After:后置通知,在方法执行后执行

@AfterRunning:返回通知,在方法返回结果之后执行

@AfterThrowing:异常通知,在方法抛出异常之后

@Around:环绕通知,围绕着方法执行
比如:声明式事务、权限拦截、日志记录、异常处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: