`
CindyLiao
  • 浏览: 13159 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring框架之AOP

阅读更多

Spring AOP的应用场景:

AOP为IOC的使用提供了很多便利,一方面应用可以直接使用AOP的功能,设计应用的横切关注点,把跨越应用程序多个模块的功能抽象出来,并通过简单的AOP使用,灵活的编制到模块中,比如可以通过AOP实现应用程序中的日志功能。另一方面在Spring内部,一些支持模块也是通过SpringAOP实现的,比如事务处理。

Spring AOP的核心技术是动态代理:

动态代理模式:

 

                                            静态类图

subject为对象访问接口,RealSubject实际对象和Proxy代理对象都实现了该接口,所以在client访问实际对象的时候会先被代理对象拦截下来,加入额外处理的动作。
 

 

                                         Proxy时序图

Spring以动态代理为基础,设计出了一系列AOP的横切实现,比如前置通知、返回通知、异常通知等

对于使用Spring AOP的应用,ProxyFactoryBean和ProxyFactory都提供了AOP功能封装,只是使用ProxyFactoryBean可以在IOC容器中完成声明式配置,而使用ProxyFactory,则需要编程式使用Spring AOP的功能。

AOP的实现:1、为目标建立代理对象 2、启动代理对象的拦截器来完成各种横切面的织入

JDK1.3以上实现了动态代理的特性,即可以为任意的java对象创建代理对象。但同时也可以通过第三方类生成器CGLIB来实现代理对象的建立,一般而言,默认方式是使用JDK来产生AopProxy代理对象,但如果遇到配置的目标不是接口类的实现,会使用CGLIB来产生AopProxy代理对象。

1、JDK实现代理对象

JDK的动态代理的特性是通过Java Reflection API来实现的,java的reflection包中有Proxy对象,该对象类似于Proxy模式中的Proxy对象。在使用时还需要为代理对象设计一个回调方法,该回调方法的作用是在其中加入作为代理需要的额外处理的动作即preOperation和postOperation方法。

在JDK中需要实现InvocationHandler接口。

/*

*proxy 代理对象实例

*method 被调用的方法

*args 调用方法的参数*/

public interface InvocationHandler {

         public Object invoke(Object proxy,Method method,Object[] args) throws Throwable;

}

在通过Porxy.newInstance方法生成具体的Proxy对象时将InvocationHandler设置到参数里面就可以让invoke方法和Proxy联系起来了。

 

 2、CGLIB生成代理对象

1、配置Enhancer对象,通过Enhancer对象生成代理对象,

2、设置Enhancer的callback回调,如JDK的Proxy对象的invoke回调方法一样。

 

建立AopProxy代理对象的过程

1、配置ProxyFactoryBean

     1)定义使用的通知器,

     2)定义ProxyFactoryBean,把它作为一个Bean来定义,它是封装AOP功能的主要类。

    3)定义target属性,目标对象

 2、ProxyFactoryBean生成AopProxy代理对象

     ProxyFactoryBean的AOP实现需要依赖JDK或者CGLIB提供的Proxy特性。

 

  • 大小: 12.5 KB
  • 大小: 15.5 KB
分享到:
评论

相关推荐

    Spring 框架之 AOP 原理剖析 - GitChat

    Spring 框架之 AOP 原理剖析.html 抓下来打包成了HTML文件, 方便离线观看

    spring-boot aop

    在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在Spring Boot项目中实现AOP功能的一个简单演示。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越...

    Spring框架-AOP和声明式事务

    Spring框架-AOP和声明式事务

    Spring框架,AOP,Spring整合Mybatis

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它提供了强大的依赖注入(DI)以及面向切面编程(AOP)功能。AOP是Spring框架的核心特性,它允许程序员将关注点分离,使得业务逻辑与系统服务如日志、事务管理等...

    基于Spring框架的AOP与MyBatis集成项目.zip

    基于Spring框架的AOP与MyBatis集成项目 项目简介 本项目是一个基于Spring框架的应用程序,专注于使用Spring AOP(面向切面编程)和MyBatis进行数据库操作的集成。项目涵盖了从基本的Git操作到复杂的动态代理、...

    spring-aop-jar

    "spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨Spring AOP、相关jar文件以及它们在实际开发中的作用。 首先,我们来看一下提供的文件: 1. aopalliance.jar:这是一...

    以注解方式模拟Spring IoC AOP

    依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合度降低。在Spring中,通常通过以下三种注解实现IoC: - `@Autowired`:自动装配,Spring会根据类型或名称找到...

    spring之AOP(动态代理)

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...

    spring mvc框架下的aop例子

    在Spring MVC框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,比如日志、事务管理、安全检查等,从核心业务逻辑中解耦出来。下面是一个简单的Spring MVC中AOP的例子,分为配置和实现两...

    使用Spring框架实现AOP切面编程.zip

    本资源通过一个Category和Publisher表的实例,使用Spring框架实现AOP切面编程,其中实现了增删改查的功能,通过事物(tx)管理器、扫描业务逻辑、声明式事务达到切面编程效果。代码中有很详细的备注,适合新手入门

    spring ioc和aop原理流程图(详细)

    这两个概念是Spring框架的核心特性,极大地简化了企业级应用的开发。 ### Spring IOC 容器 **控制反转(IOC)** 是一种设计模式,它将对象的创建和管理职责从应用代码中分离出来,转交给外部容器负责。在Spring...

    org.springframework.aop

    在Spring框架中,AOP(Aspect Oriented Programming,面向切面编程)是其核心特性之一,它允许开发者将关注点从主业务逻辑中分离出来,如日志、事务管理等,形成独立的切面,实现代码的解耦和模块化。本篇将深入探讨...

    Spring_aop源码

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你...

    Spring AOP框架实现的结构分析

    在 Spring AOP 框架中,Advisor 组件是核心组件之一,负责将方面信息与目标对象信息组织到一起。Advice 组件是增强的实现,Pointcut 组件是切入点的描述,Advised 组件是目标对象信息的保存,AopProxy 组件是 AOP ...

    Spring AOP教程

    Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。

    springIOC与AOP配置

    依赖注入(Inversion of Control,简称IOC)是Spring框架的核心特性之一,它的主要目标是降低组件之间的耦合度。在传统的Java应用中,对象通常自行创建依赖的对象,而在IOC中,这个责任由一个外部容器(即Spring的...

    在Spring框架中使用AspectJ框架实现AOP的补充jar包.zip

    除了Spring的aop,还有AspectJ框架的aop,这里是在Spring框架中使用AspectJ框架实现AOP的补充jar包,还有一个jar包会随着Spring框架的版本更新而更新。这也是分开成spring框架包和在Spring框架中使用AspectJ框架实现...

    spring aop spring aop

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,用于实现横切关注点的模块化。它允许开发者定义“切面”,将那些与业务逻辑无关,却为多个对象共有的行为(如日志、...

Global site tag (gtag.js) - Google Analytics