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

[size=medium][color=red][b] [align=center]----------------通过Annotation 实现AOP----------[/align][/b][/color][/size]
[size=small][color=olive][b]使用Annotation 控制调用用对应的方法输出对象的日志信息[/b][/color][/size]
[b][size=small][color=violet]1、创建一个annotation :[/color][/size][/b]
/**
* 创建一个annotation , 利用annotation 方便的控制需要输出的信息
* @author Administrator
* annotation: 注视;评注;
* retention: 保持力
* RetentionPolicy: 保持的
*/
@Retention(RetentionPolicy.RUNTIME)//运行时引用
public @interface LogInfo {

public String value() default "";
}


[size=small][color=gray][b]2、在需要添加日志的方法上面使用@LogInfo("") 标注需要输出的 信息[/b][/color][/size]
public interface UserService {

//添加
@LogInfo("实现了添加信息")
public void addUser(String user);

//获取信息
@LogInfo("实现了查询一个")
public UserEntity findOne();


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




[size=medium][align=center][color=red][b] annotation 实现AOP 切面编程:[/b][/color][/align][/size]
[b][size=small][color=olive][b] 1、创建一个切面类:@Aspect 来表示该类为一个切面 类[/b][/color][/size][/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][size=medium][color=violet][b] 2、配置文件设置为自动匹配:[/b][/color][/size][/b]
 <!-- 使用annotation实现AOP ,切面编程 -->
<aop:aspectj-autoproxy/>



[b][color=red][size=medium][align=center]---------------------------通过XML 文件实现AOP--------------[/align][/size][/color][/b]
[size=small][color=violet][b][b][b]1、配置文件中:[/b][/b][/b][/color][/size]
<!-- 通过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>


[size=large][color=gray][b]2、类:[/b][/color][/size]
/**
* 基于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("程序结束调用!");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值