`

Spring-AOP小结

 
阅读更多

基础性的知识点,参考:http://www.docin.com/p-650303600.html

 

什么是AOP

Aspect Oriented Programming 面向方面/切面编程


AOP的作用

实现组件的重复利用,将共通组件与目标对象解耦,改善程序结构,提高灵活性


相关概念

1.Aspect切面
2.JoinPoint连接点:切面组件在目标对象上作用的位置
3.Pointcut切入点:连接点的集合,采用表达式指定
4.Target Object目标对象
5.Advice通知:切面组件在连接点上执行的动作,如:方法调用前/后/前后
6.AutoProxy动态代理:采用AOP之后,容器返回代理对象,用户使用后,由代理对象调用切面组件和目标对象的功能
a.目标对象有接口采用JDK代理 b没有接口采用CGLIB代理


使用

1.引入Jar包

所需Jar包

aspectjrt.jar  aspectjweaver.jar 
结合spring框架所需jar
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
 
       
2.新建切面
切面只是普通的bean
例如:
public class OptLogger{
	//前置方法
	public void logger(){
		System.out.println("记录日志");
	}
	
	//后置方法
	public void myafterReturing(Object retVal){
	   System.out.println("后置通知"+retVal);
	}
	
	//异常方法
	public void myafterException(Exception ex){
	   System.out.println("--异常通知begin--");
	   ex.printStackTrace();
	   System.out.println("--异常通知end--");
	}
	
	//最终通知
	public void myafter(){
		System.out.println("--最终通知--");
	}
}
 
3.配置文件
<!--注册切面-->
<bean id = "optLogger" class="tarena.aop.OptLogger"></bean>

<aop:config>
	<aop:pointcut id="servicepointcut" expression="execution(* tarena.service.*.*(..))" />
	<!--前置通知-->
	<aop:aspect id="loggeraspect" ref="optLogger">
		<aop:before method="logger" pointcut-ref="servicepointcut"/>
	</aop:aspect>
	<!--后置通知-->
	<aop:aspect id="loggeraspect" ref="optLogger">
		<aop:after-returing method="myafterReturing" return="retVal" pointcut-ref="servicepointcut"/>
	</aop:aspect>
	<!--异常通知-->	
	<aop:aspect id="loggeraspect" ref="optLogger">
		<aop:after-thowing method="myafterException" throwing="ex" pointcut-ref="servicepointcut"/>
	</aop:aspect>	
	<!--最终通知 不论是否发生异常都会执行-->	
	<aop:aspect id="loggeraspect" ref="optLogger">
		<aop:after method="myafter" pointcut-ref="servicepointcut"/>
	</aop:aspect>	
	
</aop:config>
 
4.切入点表达式说明:
Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合.
args()
@args()
execution()
this()
target()
@target()
within()
@within()
@annotation
其中:其中execution 是用的最多的,其格式为:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)
returning type pattern,name pattern, and parameters pattern是必须的.
ret-type-pattern
1.*表示任何返回值
2.全路径的类名等.
 
name-pattern:指定方法名
1.* 代表所有方法
2.set*,代表以set开头的所有方法

 

parameters pattern:指定方法参数(声明的类型)
1.(..)代表所有参数
2.(*)代表一个参数
3.(*,String)代表第一个参数为任何值,第二个为String类型.
具体举例说明:
任意公共方法的执行: execution(public * *(..))
任何一个以“set”开始的方法的执行: execution(* set*(..))
AccountService 接口的任意方法的执行:execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:execution(* com.xyz.service.*.*(..))
定义在service包和所有子包里的任意类的任意方法的执行:execution(* com.xyz.service..*.*(..))
定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行: execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
*** >  最靠近(..)的为方法名, 靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

pointcutexp包里的任意类.
within(com.test.spring.aop.pointcutexp.*)
pointcutexp包和所有子包里的任意类.
within(com.test.spring.aop.pointcutexp..*)
实现了Intf接口的所有类,如果Intf不是接口,限定Intf单个类.
this(com.test.spring.aop.pointcutexp.Intf)
***> 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型.

带有@Transactional标注的所有类的任意方法.
@within(org.springframework.transaction.annotation.Transactional)
@target(org.springframework.transaction.annotation.Transactional)
带有@Transactional标注的任意方法.
@annotation(org.springframework.transaction.annotation.Transactional)
***> @within和@target针对类的注解,@annotation是针对方法的注解

参数带有@Transactional标注的方法.
@args(org.springframework.transaction.annotation.Transactional)
参数为String类型(运行是决定)的方法.
args(String)
Pointcut 可以通过Java注解和XML两种方式配置,如下所示:
-- 待补









 

分享到:
评论

相关推荐

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

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

    tiny-spring-step-6-invite-application-context.zip

    五、小结 Spring的IoC容器,尤其是ApplicationContext,极大地简化了Java应用的开发和管理。它将对象的创建与管理抽象化,使得开发者能更专注于业务逻辑,而不是繁琐的依赖关系。了解并熟练掌握ApplicationContext...

    spring-security 官方文档 中文版

    - **小结**:这些组件共同构成了 Spring Security 的核心架构,提供了强大的身份验证和授权能力。 **5.3 验证** - **什么是 Spring Security 的验证呢?** - Spring Security 的验证机制允许开发者自定义认证过程...

    Spring框架系列(9) - Spring AOP实现原理详解之AOP切面的实现.doc

    七、小结 AOP 切面的实现是将切面类的所有切面方法根据使用的注解生成对应 Advice,并将 Advice 连同切入点匹配器和切面类等信息一并封装到 Advisor 中,为后续交给代理增强实现做准备的过程。理解 Spring AOP 的...

    Spring AOP详细介绍.docx

    六 小结Spring AOP 是面向切面编程的一种实现,它通过切面、通知和切入点等概念,将关注点分离,提高代码的可复用性和可维护性。在实际开发中,善用 AOP 可以有效提升系统的灵活性和模块化程度,同时降低复杂性。...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.6.2.1. 文档视图定义 14.6.2.2. Controller 代码 14.6.2.3. Excel视图子类 14.6.2.4. PDF视图子类 14.7. JasperReports 14.7.1. 依赖...

    spring--day02笔记.doc

    小结 Spring框架提供了一个强大的IoC容器和依赖注入机制,允许开发者以声明的方式管理应用程序中的对象关系和依赖关系。同时,Spring框架还提供了一些Annotation和AOP机制,允许开发者以模块化的方式管理应用程序...

    Spring笔记和小结

    6. **AOP(面向切面编程)**:Spring的AOP模块允许我们在不修改原有业务代码的情况下,对程序进行功能增强,如日志记录、性能监控、权限校验等。我们可以定义切面并指定切入点,Spring会在合适的时候自动执行这些切...

    spring boot 全面的样例代码

    - [Spring Boot Actuator监控端点小结](http://blog.didispace.com/spring-boot-actuator-1/) - [在传统Spring应用中使用spring-boot-actuator模块提供监控端点]...

    AOP小结

    **AOP小结** 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在解决软件开发中的横切关注点问题。在传统的面向对象编程中,业务逻辑与系统服务(如日志、事务管理、权限检查等)往往交织...

    Spring框架小结

    Spring框架作为Java开发领域中最受欢迎的企业级应用程序框架之一,其核心特性包括控制反转(Inversion of Control, IoC)、依赖注入(Dependency Injection, DI)、面向切面编程(Aspect Oriented Programming, AOP...

    spring+velocity发送邮件

    根据提供的信息,我们可以详细探讨...### 小结 通过Spring框架结合Velocity模板引擎,可以方便地实现邮件的自动化发送。这种方式不仅可以提高邮件内容的定制化程度,还可以有效减少重复性的手工操作,提升工作效率。

    Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP).doc

    **AOP使用问题小结** 1. **切入点的声明规则**:切点通常由`@Pointcut`注解定义,可以基于方法、包、注解等条件。 2. **增强通知的顺序**:Spring默认按照方法的顺序执行通知,`@Before`先于`@AfterReturning`,`@...

    spring学习小结

    【Spring 框架学习小结】 Spring 是一个流行的 Java 应用开发框架,它以其控制反转(Inversion of Control, IOC)和面向切面编程(Aspect-Oriented Programming, AOP)为核心特性,被誉为轻量级框架。下面将详细...

    Spring 个人小结

    spring 个人小结 ,工厂模式 源码解析 ,AOP ,IOC 隔离事务

    spring-boot项目实践总结

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是简化新Spring应用程序的初始构建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种

    Spring3.2小结

    Spring是一个开源的Java框架,它旨在简化企业级应用程序的开发,通过提供一个容器来管理和配置对象,以及支持面向切面编程(Aspect-Oriented Programming,AOP)。 **控制反转(IoC)**: 控制反转是Spring的核心...

    spring 学习小结笔记

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(DI)和面向切面编程(AOP)功能而闻名。本笔记将深入探讨Spring的核心概念,包括如何与Hibernate结合访问数据库,以及如何利用JDBC进行对象化的数据...

    梦之都辛星Spring4.x参考资料

    - AOP编程部分:包括核心概念、指定代理、自动代理、AspectJ、使用注解、知识小结等章节。 8. 学习态度与习惯 在教程中,强调了学无止境、追求技术进步的理念,并鼓励学习者将学习作为一种习惯。教程还传递了知识...

Global site tag (gtag.js) - Google Analytics