一、Spring中AOP的应用场景、AOP原理、好处?前端
答:AOP:Aspect Oriented Programming面向切面编程;用来封装横切关注点,具体能够在下面场景中使用:java
Authentication权限、Caching缓存、Contextpassing内容传递、Error handing错误处理、Lazy loading懒加载、Debugging调试、logging、tracing、profiling and monitoring记录跟踪优化校准、Persistence持久化、Resource pooling资源池、Synchronization同步、Transactions事务原理;spring
原理:AOP是面向切面编程,是经过动态代理的方式为程序添加统一功能,集中解决一些公共问题。数据库
优势:一、各个步骤之间的良好隔离性耦合性大大下降;编程
二、源代码无关性,再扩展功能的同时不对源码进行修改操做。后端
二、Spring中IOC的做用与原理?对象建立的过程。设计模式
答:IOC:Inversion Of Control控制反转。缓存
当某个角色须要另一个角色协助的时候,在传统的程序设计过程当中,一般由调用者来建立被调用者的实例对象。服务器
但在spring中建立被调用者的工做再也不由调用者来完成,所以称为控制反转。建立被调用者的工做由spring来完成,而后注入调用者直接使用。session
三、介绍Spring框架
答:它是一个一站式(full-stack全栈式)框架,提供了从表现层-springMVC到业务层-spring再到持久层-springdata的一套完整的解决方案。咱们在项目于中能够只使用spring一个框架,它就能够提供表现层的mvc框架,持久层的Dao框架。它的两大核心IOC和AOP更是为咱们程序解耦和代码简洁易维护提供了支持。
四、Spring常见建立对象的注解?
答:@Component、@Controller、@Service、@Repository
五、Spring中用到的设计模式?
答:简单工厂、工厂方法、单例模式、适配器、包装器、代理、观察者、策略、模板方法。
六、Spring的优势?
答:一、下降了组件之间的耦合性,实现了软件各层之间的解耦;
二、可使用容易提供的众多服务,如事务管理,消息服务等;
三、容器提供单例模式支持;
四、容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能;
五、容器提供了众多的辅助类,能加快应用的开发;
六、spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
七、spring属于低侵入式设计,代码的污染极低;
八、独立于各类应用服务器;
九、spring的DI机制下降了业务对象替换的复杂性;
十、spring的高度开放性,并不强制应用彻底依赖于spring,开发者能够自由选择spring的部分或所有
七、Spring Bean的做用域之间有什么区别?
答:spring容器中的bean能够分为5个范围。全部范围的名称都是自说明的,可是为了不混淆,仍是让咱们来解释一下:
一、singleton:这种bean范围是默认的,这种范围确保无论接受到多少个请求,每一个容器中只有一个bean的实例,单例模式由bean factory自身来维护;
二、prototype:原形范围与单例范围相反,为每个bean请求提供一个实例;
三、request:在请求bean范围与单例范围相反,为每个bean请求提供一个实例;
四、session:与请求范围相似,确保每一个session中有一个bean的实例,在session过时后,bean会随之失效;
五、global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工做时,它包含不少portlet。若是你想要声明让全部的portlet共用全局的存储变量的话,那么这全局变量须要存储在global-session中。
全局做用域与Servlet中session做用域效果相同。
八、Spring管理事务有几种方式?
答:有两种方式:
一、编程式事务,在代码中硬编码。(不推荐使用)
二、声明式事务,在配置文件中配置(推荐使用)
声明式事务又分为两种:
a、基于XML声明式事务;
b、基于注解的声明式事务。
九、Spring中自动装配的方式有哪些?
答:一、No:即不启用自动装配;
二、byName:经过属性名字的方式查找JavaBean依赖的对象并为其注入。
好比说类Computer有个属性printer,指定其autowire属性为byName后,Spring IOC容器会在配置文件中查找id/name属性为printer的bean,而后使用Setter方法为其注入。
三、byType:经过属性类型查找JavaBean依赖的对象并为其注入。
好比类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IOC容器会查找Class属性为Printer的bean,使用Setter方法为其注入。
四、constructor:与byType同样,也是经过类型查找依赖对象。
与byType的区别在于它不是使用Setter方法注入,而是使用构造器注入。
五、autodetect:在byType和constructor之间自动的选择注入方式。
六、default:由上级标签<beans>的default-autowire属性肯定。
十、Spring中的核心类有哪些,各有什么做用?
答:一、BeanFactory:产生一个新的实例,能够实现单例模式;
二、BeanWrapper:提供统一的get及set方法;
三、ApplicationContext:提供框架的实现,包括BeanFactory的全部功能。
十一、Bean的调用方式有哪些?
答:有三种方式能够获得Bean并进行调用:
一、使用BeanWrapper
1 HelloWorld hw = new HelloWorld() ; 2 BeanWrapper bw = bew BeanWrapper(hw) ; 3 bw.setPropertyValue("msg" , "HelloWorld") ; 4 System.out.println(bw.getPropertyCalue("msg")) ;
二、使用BeanFactory
1 InputStream is = new FileInputStream("config.xml") ; 2 XmlBeanFatory fatory = new XmlBeanFatory(is) ; 3 HelloWorld hw = (HelloWorld)factory.getBean("HelloWorld") ; 4 System.out.println(hw.getMsg()) ;
三、使用ApplicationContext
1 ApplicationContext context= new FleSystemXmlApplicationContext("config.xml") ; HelloWorld hw = (HelloWorld)context.getBean("HelloWorld") ; System.out.println(hw.getMsg()) ;
十二、什么是IOC,什么又是DI,他们有什么区别?
答:依赖注入DI是一个程序设计模式和架构模型,一些时候也称做为控制反转,尽管在技术上来说,依赖注入是IOC的一个特殊实现,依赖注入是指一个对象应用另一个对象来提供一个特殊的能力,
例如:把一个数据库已链接的参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行建立一个链接。
控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减小依赖应用控制反转,对象在被建立的时候,由一个调控系统内全部对象的外界实体,将其所依赖的对象的引用,传递给它。也能够说,依赖注入到对象中。
因此,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
1三、Spring有两种代理方式:
答:若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy代理。
优势:由于有接口,因此使系统更加松耦合;
缺点:为每个目标类建立接口,若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
优势:由于代理类与目标类是继承关系,因此不须要有接口的存在;
缺点:由于没有使用接口,因此系统的耦合性没有使用JDK的动态代理好。
1四、SpringMVC的流程?
答:一、用户发送请求至前端控制器DispatcherServlet;
二、DispatcherServlet收到请求调用HandlerMapping处理器映射器;
三、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截对象(若是有则生成)一并返回给DispatcherServlet;
四、DispatcherServlet经过HandlerAdapter处理器适配器调用处理器;
五、执行处理器(Controller,也叫后端控制器);
六、Controller执行完成返回ModelAndView;
七、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet;
八、DispatcherServlet将ModelAndView传给ViewReslover视图解析器;
九、ViewReslover解析后返回具体View;
十、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中);
十一、DispatcherServlet响应用户。
1五、SpringMVC的优缺点?
答:优势:
一、它是基于组件技术的、所有的应用对象,不管控制器和视图,仍是业务对象之类的都是java组件,而且和Spring提供的其余基础结构紧密集成;
二、不依赖于Servlet API(目标虽是如此,可是在实现的时候确实是依赖于Servlet的);
三、支持各类请求资源的映射策略;
四、它应是易于扩展的。
缺点:
一、Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行;
二、太过于细分,开发效率低;
三、过分追求完美,有过分设计的危险。