什么是spring?
创始人:罗宾·约翰逊
Spring:
Spring提供致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。
可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Pure Old Java Object)对象提供企业级的服务。
Spring采用分层架构,这意味着你可以仅选择其中任何一个独立的部分,而它的架构是内部一致的。
Spring目标
1、应用程序代码并不依赖于Spring APIs。
2、Spring不和现有的解决方案竞争,而是致力于将它们融合在一起
3、核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
分层架构
表示层-业务逻辑层―数据访问层-数据库 ,系统层次的职责的清晰以及分离.是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。
面向接口编程:利用接口可以忽略不同底层的实现
什么是IOC?
IOC(Inverse of control)中文叫控制反转,也叫做DI(Dependency Injection) 中文叫依赖注入,它是一个过程,在这个过程中,对象提前定义好它们的依赖关系,这里依赖指的是对象创建时必须的属性对象。这些属性我们可以通过构造方法参数,工厂方法的参数,或者对象创建之后,通过调用属性的setter方法完成必须属性的赋值。容器创建bean对象时,根据依赖关系注入依赖对象,这个过程就是一个逆向过程,所以叫做反转。
什么是AOP?
AOP(面向切面编程):实现了业务逻辑和通用逻辑的代码分离,便于维护和升级,降低了业务逻辑和通用逻辑的耦合。
特点:即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。
AOP中的相关概念:
1、横切关注点(Cross-cutting concerns): 在一个服务的流程中插入与业务逻辑无关的系统服务逻辑(例如:Logging,security),这样的逻辑称为Cross-cutting concerns. 关注点可能横切多个对象,例事务管理就是J2EE应用中一个很好的横切关注点例子。–概念
2、切面(方面)(Aspect):将散落于各个业务对象之中的Cross-cutting concerns收集起来(独立出来),设计为各个独立可重用的对象, 这些特殊对象称之为Aspect. 方面用Spring的 Advisor或拦截器实现。–具体的描述
3、连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出点。在Spring的AOP实现中,连接点总是一个方法调用。其他的例子包括访问字段(包括实例中字段的读写),变量和异常处理。
4、通知(Advice): 在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架 包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。
5、切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合 。您可以在某个定义文件中指定PointCut,例Spring中就可以用正则表达式在Spring的配置文件中指定Pointcut.
6、引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。
7、目标对象(Target Object): 包含连接点的对象。也被称作被通知或被代理对象。
8、AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
9、织入(Weave): Advice被应用至对象之上的过程称之为织入(Weave)。在AOP中织入的方式有几个时间点:编译时期(Compile time),类加载时期(classload time),执行时期(Runtime) 例如使用AspectJ编译器就可以在编译时期完全织入。Spring和其他纯Java AOP框架一样,在运行时完成织入。
AOP 通知类型
10、在特定的连接点,AOP框架执行的动作。(相当于代理后的动作)
11、Around通知: 包围一个连接点的通知,如方法调用。这是最强大的通知。Around通知在方法调用前后完成自定义的行为。它们负责选择继续执行连接点或通过返回它们自己的返回值或抛出异常来短路执行。
12、Before通知: 在一个连接点之前执行的通知,但这个通知 不能阻止连接点前的执行(除非它抛出一个异常)。
13、After returning通知: 在连接点正常完成后执行的通知, 例如,一个方法正常返回,没有抛出异常。
14、Throws通知: 在方法抛出异常时执行的通知。Spring提供 强类型的Throws通知,因此你可以书写代码捕获感兴趣的异常(和它的子类),不需要从Throwable 或Exception强制类型转换。