`
ynp
  • 浏览: 439363 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring学习笔记--------AOP操作

阅读更多
* AOP操作可与通过注解和xml的方式实现;
* 有个问题,如果高手看到了可以考虑下:采用注解实现,用后置通知的时候,如果后置通知方法名叫after()的话,则先会打印最终通知,后打印后置通知!!!,用xml没有这个问题,很怪啊????
* 采用注解方式,切面也必须交给sping管理;

*配置实例

application.xml------->

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
		xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="productService" class="com.xx.dao.impl.ProductServiceBean"></bean> 
	<!-- 注解方式 -->
	<!-- 
	<aop:aspectj-autoproxy/>
	<bean id="myInterceptor" class="com.xx.aspect.MyInterceptorAnnotation"></bean> 
	 -->
	<!-- xml配置方式 -->
	<bean id="myInterceptor" class="com.xx.aspect.MyInterceptorXML"></bean> 
	<aop:config >
		<aop:aspect  ref="myInterceptor">
			<aop:pointcut id="myAop" expression="execution(java.lang.String com.xx.dao.impl.ProductServiceBean.*(..))"/>
			<aop:before pointcut-ref="myAop" method="before"/>
			<aop:after-throwing pointcut-ref="myAop" method="exception"/>
			<aop:after-returning  pointcut-ref="myAop" method="afterReturn"/>
			<aop:after pointcut-ref="myAop" method="after"/>
			<aop:around pointcut-ref="myAop" method="around"/>
		</aop:aspect>
	</aop:config>
</beans>


注解实现的MyInterceptorAnnotation------->

package com.xx.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * 切面类(annotation配置实现)
 * @author user
 *
 */
@Aspect
public class MyInterceptorAnnotation {
	@Pointcut("execution(* com.xx.dao.impl.ProductServiceBean.*(..))")
	private void anyMethod(){}//声明一个切入点
	
	@Before("anyMethod()")
	public void before(){
		System.out.println("这是前置通知");
	}
	
	@AfterReturning("anyMethod()")
	public void afterReturn(){
		System.out.println("这是后置通知");
	}
	
	@After("anyMethod()")
	public void after1(){ //如果改为after()的话,则先会打印最终通知,后打印后置通知!!!,用xml没有这个问题,很怪啊。
		System.out.println("这是最终通知");
	}
	
	@AfterThrowing("anyMethod()")
	public void exception(){
		System.out.println("这是例外通知");
	}
	
	@Around("anyMethod()")
	public Object around(ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("进入环绕通知");
		Object result = pjp.proceed();
		System.out.println("退出环绕通知");
		return result;
	}
	
}


xml实现的MyInterceptorXML------->

package com.xx.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 切面类(XML配置实现)
 * @author user
 *
 */
public class MyInterceptorXML {
	
	public void before(){
		System.out.println("这是前置通知");
	}
	public void afterReturn(){
		System.out.println("这是后置通知");
	}
	public void exception(){
		System.out.println("这是例外通知");
	}
	public void after(){
		System.out.println("这是最终通知");
	}
	//环绕通知时固定写法
	public Object around(ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("进入环绕通知");
		Object result = pjp.proceed();
		System.out.println("退出环绕通知");
		return result;
	}
}



结果------->

这是前置通知
进入环绕通知
这是update方法
这是后置通知
这是最终通知
退出环绕通知


分享到:
评论

相关推荐

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    spring-framework-2.5-rc2-with-dependencies\spring-framework-2.5-rc2\spring-framework-2.5-rc2docs

    这个文档集合包括了Spring的API参考、用户指南、开发者笔记等,是学习和使用Spring 2.5 RC2的宝贵资源。 首先,让我们了解一下Spring的核心特性。2.5版本引入了一些重要的增强,如依赖注入(Dependency Injection,...

    spring ioc aop mvc boot-学习笔记.docx

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了强大的依赖注入(IOC)和面向切面编程(AOP)功能,以及用于构建Web应用程序的MVC框架。Spring Boot则是基于Spring框架构建的应用程序启动器,旨在简化...

    Spring2.5.6学习笔记-最新

    以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    SSH笔记-AOP

    SSH笔记主要围绕的是Spring框架中的AOP(面向切面编程)特性进行讲解,结合了动态代理和基于注解的配置方式。AOP是Spring框架的一个重要组成部分,它提供了一种模块化和解耦代码的方式,使得我们可以将关注点分离到...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    Spring-IOC-AOP.md

    Spring学习笔记,主要包括核心技术IOC和AOP

    Spring学习笔记(14)----使用CGLIB实现AOP功能

    在本篇Spring学习笔记中,我们将探讨如何使用CGLIB库来实现AOP功能。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛用于动态代理和运行时织入AOP切面。在Spring中,如果目标类没有...

    Spring Aop 学习笔记

    Spring Aop 学习笔记

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    Spring.NET学习笔记 - 刘冬.NET - 博客园

    这个压缩包包含了一系列刘冬.NET在博客园上发布的Spring.NET学习笔记,帮助读者深入理解这个强大的框架。 1. **控制反转(IoC)**: 控制反转是Spring.NET的核心概念之一,它将对象的创建和管理权交给了框架,而...

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...

    JSF2整合Spring3------JSF学习笔记4

    **JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...

    Spring.NET学习笔记-实现一个简易的IoC框架

    ### Spring.NET学习笔记-实现一个简易的IoC框架 #### 一、背景介绍与理论基础 在.NET领域中,Spring.NET框架是一个非常重要的轻量级框架,它支持依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring AOP学习笔记

    NULL 博文链接:https://linres.iteye.com/blog/281221

    SSH学习笔记--整理.rar

    最后,“Spring学习笔记(马士兵spring视频笔记).doc”涵盖了Spring框架的关键内容。Spring是一个全面的企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、数据访问、Web应用、事务管理等多种功能。笔记中...

    SpringDM笔记7-开发SpringDM Bundle

    SpringDM提供了一种在OSGi容器中使用Spring IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)的方法。 在本笔记中,我们将深入探讨如何开发SpringDM Bundle。首先,我们需要理解OSGi的基本概念,...

Global site tag (gtag.js) - Google Analytics