Spring是java中一个非常优秀的开源框架

1、它内部最核心的功能就是IOC机制,即控制反转,使用工厂模式,

       让java中类的创建不在通过new的方式,而是配置在映射文件中,再通过反射,

       在程序运行时动态创建实例,

       2、还使对象之间关联的方式不是通过程序代码,

       而是通过配置文件去实现(DI技术),实现了关联对象之间的松耦合

       3、其次Spring还有一个核心技术就是AOP面向切面编程的实现,它通过动态代理模式技术

       (使用的是CGLIB)使一些零散方法实现自身作用的同时功能再一次得到增强,而不影响方法

       本身的逻辑实现,用起来灵活可变,耦合程度不高

Spring中7大主要核心:

1、核心对象:Spring容器,即核心类BeanFactory,它是工厂模式的实现,使用了

          控制反转(IOC)的思想,使通过xml配置或者注解而交给Spring管理的类的实例,

          在程序运行时动态得由Spring容器创建,将对象之间的关联与应用程序代码分离

   2、上下文,它是Spring的上下文配置文件,向Spring容器提供了配置信息,如企业服务,

   邮件的发送,定时调度,I18N国际化

   3、AOP面向切面编程实现,将面向切面编程的思想很好的融合进了Spring容器中,使一些零散的方法实现了功能增强,此外AOP将事务很好的融入到了Spring容器中,不依赖EJB组件,就可使用声明式事务

   4、JDBCDao,Spring针对JDBC访问数据库也进行了一些简单的优化操作,使JDBC的异常层次结构

          得到了简化处理,如关闭预处理对象,连接

   5、与ORM框架轻松集成,Spring很好的提供了一套实现ORM对象关系的工具,使之可以很轻松的和实现了ORM的

          框架集成,所有的框架都是遵循事务管理和异常层次结构,例如Hibernate

   6、WEB,Spring对于WEB层也提供了相应的上下文对象,使之可以很轻松的和WEB层方面的框架集成,

          例如struts2

   7、SpringMVC,一套全功能的遵循MVC思想的WEB层框架,它是高度可配置的,与struts2相比,耦合性更弱,

          SpringMVC还支持许多视图技术,如Jsp,Velocity

Spring 主要核心是:

(1)控制反转(IOC):传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者getInstance 等直接或者间接调用构造方法创建一个对象,而在 Spring 开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring 为我们提供的对象即可,这就是控制反转的思想。实例化一个 java 对象有三种方式:

使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用 spring 时我们就不需要关

心通过何种方式实例化一个对象,spring 通过控制反转机制自动为我们实例化一个对象。

(2)依赖注入(DI):Spring 使用 Java Bean 对象的 Set 方法或者带参数的构造方法为我们在创

建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。

(3)面向切面编程(AOP):在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对

象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个

切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的

思想。

Aop应用场景

AOP是Aspect Oriented Programing的简称,面向切面编程。AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理、缓存、对象池管理以及日志记录。AOP将这些分散在各个业务逻辑中的代码通过横向切割的方式抽取到一个独立的模块中。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。

代理对象的方法 = 增强处理 + 被代理对象的方法

Spring AOP 则采用运行时生成 AOP 代理类,因此无需使用特定编译器进行处理。由于 Spring AOP需要在每次运行时生成 AOP 代理,因此性能略差一些。

AOP使用场景

      AOP用来封装横切关注点,具体可以在下面的场景中使用

      Authentication 权限

      Caching 缓存

      Context passing 内容传递

      Error handling 错误处理

      Lazy loading 懒加载

      Debugging 调试

      logging, tracing, profiling andmonitoring 记录跟踪优化校准

      Performance optimization 性能优化

      Persistence 持久化

      Resource pooling 资源池

      Synchronization 同步

      Transactions 事务

AOP相关概念

方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的 Advisor或拦截器实现。

连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出

通知(Advice): 在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice: BeforeAdvice, AfterAdvice,ThrowAdvice和DynamicIntroductionAdvice

切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点:例如,使用正则表达式。 Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解,MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上

引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。Spring中要使用Introduction, 可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口

目标对象(Target Object): 包含连接点的对象。也被称作被通知或被代理对象。POJO

AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。

织入(Weaving): 组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

Spring 事务

Spring 支持两种类型的事务管理:

1.编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维

护。

2.声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和 XML 配

置来管理事务。