----------------通过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("程序结束调用!");
}
}
分享到:
相关推荐
本篇文章将重点讲解如何通过XML配置方式在Spring中实现AOP。 首先,了解AOP的基本概念是必要的。AOP的核心是切面(Aspect),它封装了多个相关操作,形成了一个关注点。切点(Pointcut)定义了这些操作应用到何处,...
"spring和Mybatis的xml配置文件提示约束包"这个主题,主要是关于在XML配置文件中使用的DTD(Document Type Definition)文档类型定义,它为XML文件提供了结构约束和语法规范。 DTD是一种元语言,用于定义XML文档的...
总结来说,Spring配置文件实现AOP的关键在于理解切点表达式和通知类型,以及如何在XML配置中定义它们之间的关系。这使得我们能够在不修改业务代码的情况下,轻松地添加或调整横切关注点,从而提升代码的灵活性和可...
在Spring中,AOP主要通过两种方式实现:基于XML配置和基于注解。随着Java注解的普及,越来越多的开发者倾向于使用注解来简化配置。在"Spring_0200_Annotation_AOP"中,我们重点关注的是注解驱动的AOP。 1. **@...
这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...
Spring AOP主要通过两种方式实现:XML配置和注解。本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时...
为了启用注解驱动的AOP,需要在Spring配置文件中添加`<aop:aspectj-autoproxy>`元素,或者在Java配置中使用`@EnableAspectJAutoProxy`注解。 ```xml <aop:aspectj-autoproxy /> ``` 或者 ```java @Configuration ...
在Spring框架中,有两种主要的方式来实现AOP:基于XML配置和基于注解。本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切...
在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...
在基于XML的配置方式下,Spring AOP提供了直观且灵活的声明式方法来实现这些关注点的分离,使得业务逻辑代码更为简洁。 在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含了若干个通知(Advice)。通知...
本主题将深入探讨如何使用AspectJ注解和XML配置在Spring中实现AOP。 首先,我们要了解AOP的基本概念。AOP的核心是切面(Aspect),它将分散在多个对象中的横切关注点(如日志、性能监控)提取出来,形成独立的模块...
以上就是Spring 2.0中使用AOP的一个基本实例,基于注解的配置方式使得AOP的使用更加直观和简洁。在实际开发中,我们可以根据需求灵活地定义切面和通知,以实现各种横切关注点的功能。 通过阅读提供的压缩包中的`src...
本篇文章将详细讲解如何通过XML配置实现Spring AOP的切面编程,帮助初学者理解这一核心特性。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在减少代码的重复性...
这里我们将深入探讨两种在Spring中实现AOP的方式:XML配置和注解配置。 首先,让我们来看看**XML配置AOP**。在Spring的早期版本中,XML配置是主要的配置方式。在`spring-aop-xml`中,你可能会看到以下关键元素: 1...
在Spring的`applicationContext.xml`或者`beans.xml`文件中,我们需要定义`tx:annotation-driven`或`<tx:advice>`元素来启用事务管理。 1. **配置事务管理器**:Spring支持多种事务管理器,如`...
Spring Annotation通过在类、方法或字段上添加特定的注解,可以实现自动配置,从而实现依赖注入和组件扫描等功能。 1. **依赖注入(Dependency Injection, DI)**:Spring Annotation中最常用的注解之一是`@...
1. **配置Spring AOP**:首先,需要在Spring的配置文件中启用AOP代理。可以通过`<aop:aspectj-autoproxy>`元素来实现。 ```xml <aop:aspectj-autoproxy /> ``` 2. **定义切面(Aspect)**:切面是AOP的核心,它...
在Spring中,我们可以使用XML配置或Annotation来声明切面。本文主要关注Annotation方式,因为它更直观、简洁。`@Aspect`是声明一个类为切面的Annotation,而`@Before`、`@After`、`@Around`、`@AfterReturning`和`@...
这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...