`
javandroid
  • 浏览: 25638 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Spring AOP之二 ——AOP的实现方式

 
阅读更多
AOP的实现者
  • AspectJ
  • AspectWerkz
  • JBoss AOP
  • Spring AOP
实现AOP的技术,主要分为两大类:
一是采用动态代理技术
利用截取消息的方式,对消息进行装饰,以取代原有对象行为的执行。
二是采用静态织入的方式
引入特定的语法创建aspect.从而使得编译器可以在编译器间织入有关aspect的代码。
两者是殊途同归,实现AOP的技术特性是相同的。

Spring AOP
SpringAOP使用纯Java实现,它不需要专门的编译过程,不需要特殊的类装载器,它在运行期通过代理方式向目标类织入增强代码。Spring并不尝试提供最完整的AOP实现,相反,它侧重于提供一种和Spring IoC容器整合的AOP实现,用以解决企业级开发中的常见问题。在Spring中,我们可以无缝地将Spring AOP、IoC和AspectJ整合在一起。

Spring AOP是AOP技术在Spring中的具体实现,它和IOC一样是构成Sping框架的重要技术。Spring AOP是基于IOC的。
Spring AOP底层是通过JDK动态代理和CGLib动态代理技术为目标Bean实现横切逻辑的。

1.JDK动态代理

2.CGLib动态代理

AspectJ
AspectJ是语言级的AOP实现。AspectJ扩展了Java语言,定义了AOP语法,能够在编译期提供横切代码的织入,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。主页位于http://www.eclipse.org/aspectj


Spring 2.0增加了对AspectJ更直接的支持。
AspectJ不是通过代理实现的,而是通过编译时织入实现的。织入是一种更高效的AOP实现,是较简单的代理方案的很好替代。


1.导入jar包(4个)
spring-aop-3.2.0.RELEASE.jar
com.springsource.org.aopalliance-1.0.0.jar
spring-aspects-3.2.0.RELEASE.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
2.导入头约束
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/aop 
						http://www.springframework.org/schema/aop/spring-aop.xsd">


3.开启AspectJ自动代理
<!-- 启用aspectJ自动代理  -->
<aop:aspectj-autoproxy/>
4.提供目标类
class UserDao{}
5.定义切面类
@Aspect
public class MyAdvisor {
	/**
	 * 前置通知
	 */
	@Before(value="execution(* cn.itcast.aspectj.annotation.*.save*(..))")
	public void before1(){
		System.out.println("前置通知执行了 ");
	}
}
6.在spring配置文件中注册目标对象和切面
<!-- 目标对象 -->
<bean id="userDao" class="cn.itcast.aspectj.annotation.UserDao"/>

<!-- 切面 -->
<bean id="myAdvisor" class="cn.itcast.aspectj.annotation.MyAdvisor"/>
7.在程序中使用代理对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/it/aspectj/annotation/beans.xml");
UserDao proxy = (UserDao) ctx.getBean("userDao");
proxy.find();
proxy.saveUser();
System.out.println(proxy.getClass().getName());
分享到:
评论

相关推荐

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...

    五、Spring源码分析——Spring Aop

    Spring AOP分为两种代理方式:JDK动态代理和CGLIB代理。JDK动态代理基于接口实现,如果目标类实现了接口,Spring会选择JDK动态代理;如果没有实现接口,Spring则会使用CGLIB代理,通过字节码技术创建一个目标类的...

    7Spring AOP盗梦空间之二——获得返回值AfterReturnning

    通过阅读《Spring AOP盗梦空间之二——获得返回值AfterReturnning》这篇博文(链接:https://garrincha.iteye.com/blog/2111779),你可以获得更详细的实践指导和示例代码。同时,结合提供的压缩包文件"Spring_AOP_...

    spring aop依赖jar包

    现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...

    Spring 入门案例——AOP

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来实现横切关注点,如日志、事务管理、性能监控等。本入门案例将帮助你理解并掌握Spring AOP的基本概念和使用方法。 在...

    征服Spring AOP—— Schema

    本文将深入探讨“Spring AOP——Schema”,这是Spring AOP的一种配置方式,通过XML schema定义切面和通知。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,旨在提高软件的模块化程度,将关注点...

    spring-aop-jar

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

    Spring aop 性能监控器

    对于源码学习,可以查看Spring AOP的实现,尤其是`org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator`和`org.springframework.aop.aspectj.AspectJExpressionPointcut`这两个类,...

    spring之AOP(动态代理)

    当目标对象没有实现接口时,Spring会自动选择CGLIB作为默认的代理方式。 在Spring Boot项目中,配置和使用AOP相对简单。首先,我们需要引入Spring AOP和AspectJ的依赖,这通常在pom.xml或build.gradle文件中完成。...

    9Spring AOP 盗梦空间之四——Around

    "9Spring AOP 盗梦空间之四——Around"这个标题暗示我们将深入探讨Spring AOP中的一个关键概念——环绕通知(Around Advice)。环绕通知是Spring AOP中功能最全面的通知类型,它提供了对方法执行前、执行后以及异常...

    springioc和spring aop

    Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...

    深入解析Spring AOP源码:从原理到实现,全方位掌握Java AOP编程精髓

    Spring AOP,全称为Spring的面向切面编程,是Spring框架的重要组成部分,旨在实现关注点的分离,提高代码的可维护性和灵活性。AOP的核心思想是将横切关注点(如日志、事务管理)从核心业务逻辑中解耦出来,形成独立...

    征服Spring AOP—— @AspectJ

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注点的模块化,如日志、事务管理等。@AspectJ是Spring AOP的一种注解驱动方式,它极大地简化了...

    spring-aop.jar

    《深入解析Spring AOP框架——以spring-aop.jar为例》 Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的核心部分之一,它为Java开发者提供了强大的面向切面的编程能力。本文将围绕...

    使用SpringAop使用Oracle数据权限控制

    Spring AOP(面向切面编程)是一个强大的工具,常用于实现业务逻辑中的横切关注点,如日志、事务管理以及我们的案例——数据权限控制。本篇将深入探讨如何结合Spring AOP和Oracle数据库来实现精细化的数据权限控制。...

    springAOP-dome

    在这个名为"springAOP-dome"的实例中,我们将探讨如何利用Spring AOP实现一个简单的日志记录功能,以作为入门学习。 首先,了解AOP的基本概念是必要的。面向切面编程是一种编程范式,旨在解决程序中的横切关注点,...

    spring AOP myeclipse 完整代码

    而AOP通过将这些关注点抽取到单独的模块——切面(Aspect)中,实现了代码的解耦和复用。 在MyEclipse中集成Spring AOP,首先需要创建一个Spring项目,并在项目中引入Spring的相关库,包括`spring-aop.jar`和`...

    8Spring AOP盗梦空间之三 ——AfterThrowing

    本文将深入探讨Spring AOP中的`AfterThrowing`通知类型,这是处理异常后置逻辑的一种方式。 首先,我们需要理解Spring AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或责任。切面通过切点...

    Spring——aop

    Spring AOP支持两种实现方式:基于代理(Proxy-based)和基于注解(Annotation-based)。 - **基于代理的AOP**:Spring会为被代理的目标对象创建一个代理对象,当调用代理对象的方法时,实际上会触发AOP逻辑。 - ...

Global site tag (gtag.js) - Google Analytics