考察点:spring程序员
依赖注入的三种方式:(1)接口注入(2)Construct注入(3)Setter注入spring
控制反转(IoC)与依赖注入(DI)是同一个概念,引入IOC的目的:(1)脱开、下降类之间的耦合;(2)倡导面向接口编程、实施依赖倒换原则; (3)提升系统可插入、可测试、可修改等特性。数据库
具体作法:(1)将bean之间的依赖关系尽量地抓换为关联关系;编程
(2)将对具体类的关联尽量地转换为对Java interface的关联,而不是与具体的服务对象相关联;缓存
(3)Bean实例具体关联相关Java interface的哪一个实现类的实例,在配置信息的元数据中描述;安全
(4)由IoC组件(或称容器)根据配置信息,实例化具体bean类、将bean之间的依赖关系注入进来。性能优化
AOP(Aspect Oriented Programming),即面向切面编程,能够说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来创建一种对象层次结构,用于模拟公共行为的一个集合。不过OOP容许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码每每横向地散布在全部对象层次中,而与它对应的对象的核心功能毫无关系对于其余类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它致使了大量代码的重复,而不利于各个模块的重用。服务器
AOP技术偏偏相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减小系统的重复代码,下降模块之间的耦合度,并有利于将来的可操做性和可维护性。框架
使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特色是,他们常常发生在核心关注点的多处,而各处基本类似,好比权限认证、日志、事物。AOP的做用在于分离系统中的各类关注点,将核心关注点和横切关注点分离开来。工具
考察点:事物管理
Spring支持编程式事务管理和声明式事务管理。许多Spring框架的用户选择声明式事务管理,由于这种方式和应用程序的关联较少,所以更加符合轻量级容器的概念。声明式事务管理要优于编程式事务管理,尽管在灵活性方面它弱于编程式事务管理,由于编程式事务容许你经过代码控制业务。
事务分为全局事务和局部事务。全局事务由应用服务器管理,须要底层服务器JTA支持(如WebLogic、WildFly等)。局部事务和底层采用的持久化方案有关,例如使用JDBC进行持久化时,须要使用Connetion对象来操做事务;而采用Hibernate进行持久化时,须要使用Session对象来操做事务。
这些事务的父接口都是PlatformTransactionManager。Spring的事务管理机制是一种典型的策略模式,PlatformTransactionManager表明事务管理接口,该接口定义了三个方法,该接口并不知道底层如何管理事务,可是它的实现类必须提供getTransaction()方法(开启事务)、commit()方法(提交事务)、rollback()方法(回滚事务)的多态实现,这样就能够用不一样的实现类表明不一样的事务管理策略。使用JTA全局事务策略时,须要底层应用服务器支持,而不一样的应用服务器所提供的JTA全局事务可能存在细节上的差别,所以实际配置全局事务管理器是可能须要使用JtaTransactionManager的子类,如:WebLogicJtaTransactionManager(Oracle的WebLogic服务器提供)、UowJtaTransactionManager(IBM的WebSphere服务器提供)等。
考察点:AOP
a. 链接点(Joinpoint):程序执行的某个特定位置(如:某个方法调用前、调用后,方法抛出异常后)。一个类或一段程序代码拥有一些具备边界性质的特定点,这些代码中的特定点就是链接点。Spring仅支持方法的链接点。
b. 切点(Pointcut):若是链接点至关于数据中的记录,那么切点至关于查询条件,一个切点能够匹配多个链接点。Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的链接点。
c. 加强(Advice):加强是织入到目标类链接点上的一段程序代码。Spring提供的加强接口都是带方位名的,如:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。
d. 引介(Introduction):引介是一种特殊的加强,它为类添加一些属性和方法。这样,即便一个业务类本来没有实现某个接口,经过引介功能,能够动态的未该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
e. 织入(Weaving):织入是将加强添加到目标类具体链接点上的过程,AOP有三种织入方式:①编译期织入:须要特殊的Java编译期(例如AspectJ的ajc);②装载期织入:要求使用特殊的类加载器,在装载类的时候对类进行加强;③运行时织入:在运行时为目标类生成代理实现加强。Spring采用了动态代理的方式实现了运行时织入,而AspectJ采用了编译期织入和装载期织入的方式。
f. 切面(Aspect):切面是由切点和加强(引介)组成的,它包括了对横切关注功能的定义,也包括了对链接点的定义。
考察点:动态代理
AOP(Aspect Orient Programming),指面向方面(切面)编程,做为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,好比事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动建立的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的表明为AspectJ;而动态代理则以Spring AOP为表明。一般使用AspectJ的编译时加强实现AOP,AspectJ是静态代理的加强,所谓的静态代理就是AOP框架会在编译阶段生成AOP代理类,所以也称为编译时加强。
Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理经过反射来接收被代理的类,而且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。
若是目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,能够在运行时动态的生成某个类的子类,注意,CGLIB是经过继承的方式作的动态代理,所以若是某个类被标记为final,那么它是没法使用CGLIB作动态代理的。
考察点:spring AOP
Authentication 权限 ,Caching 缓存 ,Context passing 内容传递 ,Error handling 错误处理 ,Lazy loading 懒加载 ,Debugging 调试 ,logging, tracing, profiling and monitoring 记录跟踪 优化 校准,Performance optimization 性能优化 ,Persistence 持久化 ,Resource pooling 资源池 ,Synchronization 同步,Transactions 事务。
考察点:框架
- 非侵入式:支持基于POJO的编程模式,不强制性的要求实现Spring框架中的接口或继承Spring框架中的类。
- IoC容器:IoC容器帮助应用程序管理对象以及对象之间的依赖关系,对象之间的依赖关系若是发生了改变只须要修改配置文件而不是修改代码,由于代码的修改可能意味着项目的从新构建和完整的回归测试。有了IoC容器,程序员不再须要本身编写工厂、单例,这一点特别符合Spring的精神"不要重复的发明轮子"。
- AOP(面向切面编程):将全部的横切关注功能封装到切面(aspect)中,经过配置的方式将横切关注功能动态添加到目标代码上,进一步实现了业务逻辑和系统服务之间的分离。另外一方面,有了AOP程序员能够省去不少本身写代理类的工做。
- MVC:Spring的MVC框架为Web表示层提供了更好的解决方案。
- 事务管理:Spring以宽广的胸怀接纳多种持久层技术,而且为其提供了声明式的事务管理,在不须要任何一行代码的状况下就可以完成事务管理。
- 其余:选择Spring框架的缘由还远不止于此,Spring为Java企业级开发提供了一站式选择,你能够在须要的时候使用它的部分和所有,更重要的是,甚至能够在感受不到Spring存在的状况下,在你的项目中使用Spring提供的各类优秀的功能。
考察点:spring
Spring是一个轻量级的DI和AOP容器框架,在项目的中的使用愈来愈普遍,它的优势主要有如下几点:
Spring是一个非侵入式框架,其目标是使应用程序代码对框架的依赖最小化,应用代码能够在没有Spring或者其余容器的状况运行。
Spring提供了一个一致的编程模型,使应用直接使用POJO开发,从而可使运行环境隔离开来。
Spring推进应用的设计风格向面向对象及面向接口编程转变,提升了代码的重用性和可测试性。
Spring改进告终构体系的选择,虽然做为应用平台,Spring能够帮助咱们选择不一样的技术实现,好比从Hibernate切换到其余的ORM工具,从Struts切换到Spring MVC,尽管咱们一般不会这么作,可是咱们在技术方案上选择使用Spring做为应用平台,Spring至少为咱们提供了这种可能性的选择,从而下降了平台锁定风险。
考察点:框架
拦截器是AOP的一种实现,struts2 拦截器采用xwork2的interceptor!而spring的AOP基于IoC基础,其底层采用动态代理与CGLIB代理两种方式结合的实现方式。
考察点:spring
Spring是一个轻量级框架,能够一站式构建你的企业级应用。
Spring的模块大概分为6个。分别是:
一、Core Container(Spring的核心)【重要】
二、AOP(面向切面变成)【重要】
三、Messaging(消息发送的支持)
四、Data Access/Integration(数据访问和集成)
五、Web(主要是SpringWeb内容,包括MVC)【重要】
六、Test(Spring测试支持,包含JUint等测试单元的支持) 七、Instrumentation(设备支持,好比Tomcat的支持)
考察点:框架
所谓"持久"就是将数据保存到可掉电式存储设备中以便从此使用,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专一于实现数据持久化的相对独立的层面。
持久层设计的目标包括:
- 数据存储逻辑的分离,提供抽象化的数据访问接口。
- 数据访问底层实现的分离,能够在不修改代码的状况下切换底层实现。
- 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。
- 数据抽象,提供更面向对象的数据操做。
持久层框架有:- Hibernate- MyBatis- TopLink- Guzz- jOOQ- Spring Data- ActiveJDBC