`
1140566087
  • 浏览: 558821 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18519
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:313969
Group-logo
J2ME 基础学习课程集
浏览量:18725
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17562
社区版块
存档分类
最新评论

Spring 使用annotation和xml配置文件实现AOP

阅读更多
     
----------------通过Annotation 实现AOP----------

  使用Annotation 控制调用用对应的方法输出对象的日志信息
  1、创建一个annotation :
/**
	 * 创建一个annotation , 利用annotation 方便的控制需要输出的信息
	 * @author Administrator
	 * annotation: 	注视;评注;
	 * retention:	保持力
	 * RetentionPolicy:	保持的
	 */
	@Retention(RetentionPolicy.RUNTIME)//运行时引用
	public @interface LogInfo {
	
		public String value() default "";
	}


2、在需要添加日志的方法上面使用@LogInfo("") 标注需要输出的 信息
public interface UserService {

	//添加
	@LogInfo("实现了添加信息")
	public void addUser(String user);
	
	//获取信息
	@LogInfo("实现了查询一个")
	public UserEntity findOne();


[b]3、在调用的时候对方法进行判断,是否属于annotationPresent ,然后获取对应的值并输出[/b]
//使用annotation 控制输出信息
	if(method.isAnnotationPresent(LogInfo.class)){
		LogInfo li = method.getAnnotation(LogInfo.class);
		com.svse.info.LogInfo.info(li.value());
	}
}

 
    

annotation  实现AOP 切面编程:

[b] 1、创建一个切面类:@Aspect 来表示该类为一个切面 类[/b]
 /**
	 * 实现:annotation 的AOP 管理
	 * 1、创建一个切面类
	 * @author Administrator
	 *
	 */
	@Component("advisor")
	@Aspect //   注意:声明该类为切面类
	public class Advisor {
		
		/**
		 * execution(* com.svse.impl.*.add*(..))
		 * 第一个*表示任意返回值;
		 * 第二个*表示当前包下的所有类;
		 * 第三个*表示以add开头的所有方法;
		 * (..)任意参数方法
		 * @param jp
		 */
		@Before("execution(* com.svse.impl.*.add*(..)) ||" +
				"execution(* com.svse.impl.*.find*(..))")
		public void before(JoinPoint jp){
			LogInfo.info("实现切面的增加,调用了"+jp.getSignature().getName()+"方法!");
		}
		
		@After("execution(* com.svse.impl.*.add*(..)) || " +
				"execution(* com.svse.impl.*.find*(..))")
		public void after(JoinPoint jp){
			LogInfo.info("after調用");
		}
		
		/**
		 * 解释:第一* 表示方法的任意返回类型
		 * @param pjp
		 * @throws Throwable
		 */
		@Around("execution(* com.svse.impl.*.add*(..)) ||" +
		"execution(* com.svse.impl.*.find*(..))")
		public void around(ProceedingJoinPoint pjp) throws Throwable{
			LogInfo.info("開始around()調用!");
			pjp.proceed();//執行程序
			LogInfo.info("結束around()調用!");
		}
		
		/**
		 * 以上方法调用顺序:before() --> around() --> 程序.. --> after() --> around()
		 */
		
	}


[b] 2、配置文件设置为自动匹配:[/b]
 <!-- 使用annotation实现AOP ,切面编程 -->
 <aop:aspectj-autoproxy/>



---------------------------通过XML 文件实现AOP--------------

[b][b]1、配置文件中:[/b][/b]
<!-- 通过XML 文件实现AOP ,切面编程 -->
		<bean id="aopBaseXML" class="com.svse.aop.AopBaseXML"></bean>
		<aop:config>
			<!-- 定义切面 -->
			<aop:aspect id="myLogAspect" ref="aopBaseXML">
				<!-- 在哪些位置加上切面 -->
				<aop:pointcut  id="myPointCut" expression="execution(* com.svse.impl.*.add*(..)) ||
				execution(* com.svse.impl.*.find*(..))"/>
				
				<!-- 加入切面的时机 -->
				<aop:before method="before" pointcut-ref="myPointCut"/>
				<aop:after method="after" pointcut-ref="myPointCut"/>
				<aop:around method="around" pointcut-ref="myPointCut"/>
			</aop:aspect>
		</aop:config>	


2、类:
/**
		 * 基于XML 实现AOP 切面编程
		 * @author Administrator
		 *
		 */
		public class AopBaseXML {
			
			/**
			 * 前通知
			 * @param jp
			 */
			public void before(JoinPoint jp){
				LogInfo.info("开始前加入日志"+jp.getSignature().getName());
			}
			
			/**
			 * 后通知
			 * @param jp
			 */
			public void after(JoinPoint jp){
				LogInfo.info("结束后加入日志"+jp.getSignature().getName());
			}
			
			/**
			 * 
			 */
			public void around(ProceedingJoinPoint pjp){
				LogInfo.info("开始前加入日志"+pjp.getSignature().getName());
				try {
					pjp.proceed();//执行程序
				} catch (Throwable e) {
					e.printStackTrace();
				}
				LogInfo.info("程序结束调用!");
			}
		}
分享到:
评论

相关推荐

    Spring 基于基于XML配置方式实现AOP

    本篇文章将重点讲解如何通过XML配置方式在Spring中实现AOP。 首先,了解AOP的基本概念是必要的。AOP的核心是切面(Aspect),它封装了多个相关操作,形成了一个关注点。切点(Pointcut)定义了这些操作应用到何处,...

    spring和Mybatis的xml配置文件提示约束包

    "spring和Mybatis的xml配置文件提示约束包"这个主题,主要是关于在XML配置文件中使用的DTD(Document Type Definition)文档类型定义,它为XML文件提供了结构约束和语法规范。 DTD是一种元语言,用于定义XML文档的...

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

    总结来说,Spring配置文件实现AOP的关键在于理解切点表达式和通知类型,以及如何在XML配置中定义它们之间的关系。这使得我们能够在不修改业务代码的情况下,轻松地添加或调整横切关注点,从而提升代码的灵活性和可...

    Spring_Annotation_AOP

    在Spring中,AOP主要通过两种方式实现:基于XML配置和基于注解。随着Java注解的普及,越来越多的开发者倾向于使用注解来简化配置。在"Spring_0200_Annotation_AOP"中,我们重点关注的是注解驱动的AOP。 1. **@...

    学习Spring笔记_AOP_Annotation实现和XML实现

    这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...

    spring aop xml 实例

    Spring AOP主要通过两种方式实现:XML配置和注解。本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时...

    spring aop实例annotation方法实现

    为了启用注解驱动的AOP,需要在Spring配置文件中添加`&lt;aop:aspectj-autoproxy&gt;`元素,或者在Java配置中使用`@EnableAspectJAutoProxy`注解。 ```xml &lt;aop:aspectj-autoproxy /&gt; ``` 或者 ```java @Configuration ...

    spring学习之五“AOP概念及使用Annotation的实现”

    在Spring框架中,有两种主要的方式来实现AOP:基于XML配置和基于注解。本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切...

    spring aop 实现源代码--xml and annotation(带lib包)

    在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...

    基于xml的SpringAOP实例

    在基于XML的配置方式下,Spring AOP提供了直观且灵活的声明式方法来实现这些关注点的分离,使得业务逻辑代码更为简洁。 在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含了若干个通知(Advice)。通知...

    Spring使用AspectJ注解和XML配置实现AOP

    本主题将深入探讨如何使用AspectJ注解和XML配置在Spring中实现AOP。 首先,我们要了解AOP的基本概念。AOP的核心是切面(Aspect),它将分散在多个对象中的横切关注点(如日志、性能监控)提取出来,形成独立的模块...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    以上就是Spring 2.0中使用AOP的一个基本实例,基于注解的配置方式使得AOP的使用更加直观和简洁。在实际开发中,我们可以根据需求灵活地定义切面和通知,以实现各种横切关注点的功能。 通过阅读提供的压缩包中的`src...

    spring xml 实现aop切面编程

    本篇文章将详细讲解如何通过XML配置实现Spring AOP的切面编程,帮助初学者理解这一核心特性。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在减少代码的重复性...

    Spring中Aop的使用包括xml和注解

    这里我们将深入探讨两种在Spring中实现AOP的方式:XML配置和注解配置。 首先,让我们来看看**XML配置AOP**。在Spring的早期版本中,XML配置是主要的配置方式。在`spring-aop-xml`中,你可能会看到以下关键元素: 1...

    Xml文件配置实现声明式事务管理

    在Spring的`applicationContext.xml`或者`beans.xml`文件中,我们需要定义`tx:annotation-driven`或`&lt;tx:advice&gt;`元素来启用事务管理。 1. **配置事务管理器**:Spring支持多种事务管理器,如`...

    Spring Annotation简介一

    Spring Annotation通过在类、方法或字段上添加特定的注解,可以实现自动配置,从而实现依赖注入和组件扫描等功能。 1. **依赖注入(Dependency Injection, DI)**:Spring Annotation中最常用的注解之一是`@...

    Spring 使用AspectJ 实现 AOP之前置通知小例子

    1. **配置Spring AOP**:首先,需要在Spring的配置文件中启用AOP代理。可以通过`&lt;aop:aspectj-autoproxy&gt;`元素来实现。 ```xml &lt;aop:aspectj-autoproxy /&gt; ``` 2. **定义切面(Aspect)**:切面是AOP的核心,它...

    基于annotation的aop实现

    在Spring中,我们可以使用XML配置或Annotation来声明切面。本文主要关注Annotation方式,因为它更直观、简洁。`@Aspect`是声明一个类为切面的Annotation,而`@Before`、`@After`、`@Around`、`@AfterReturning`和`@...

    EJB+Annotation实现AOP的DEMO

    这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...

Global site tag (gtag.js) - Google Analytics