spring核心之AOP学习总结二
一:springAOP常用的注解
@Aspect:声明方面组件
@Before:声明前置通知
@After-returning:声明后置通知
@After:声明最终通知
@Around:声明环绕通知
@After-throwing:声明异常通知
二:使用SpringAOP的注解对总结一中的案例进行重构
1:注释掉方面组件的声明以及将方面组件应用到目标组件的配置
<!-- 配置日志组件
<bean id="operatorLogger" class="com.hlcui.aspect.OperatorLogger"></bean> 配置方面组件
<aop:config>
<aop:aspect ref="operatorLogger">
<aop:before method="logger" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect> <aop:aspect ref="operatorLogger">
<aop:around method="logger2" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect> <aop:aspect ref="operatorLogger">
<aop:after-throwing method="logger3" throwing="e" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect>
</aop:config>--> <!-- 开启SpringAOP的注解扫描 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
2:使用@Aspect注解声明方面组件,并且在方面组件上面声明前置、后置或者是环绕通知
/**
*
*/
package com.hlcui.aspect; import java.text.SimpleDateFormat;
import java.util.Date; import org.aspectj.lang.ProceedingJoinPoint;
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.springframework.stereotype.Component; /**
* @author Administrator
*
*/
@Aspect
@Component
public class OperatorLogger { @Before("within(com.hlcui.controller..*)")
public void logger(){
System.out.println("-->记录用户日志");
} @Around("within(com.hlcui.controller..*)")
public Object logger2(ProceedingJoinPoint p ) throws Throwable{
String targetName = p.getTarget().getClass().getName();
String methodName = p.getSignature().getName();
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
String msg = date+"执行"+targetName+methodName;
System.out.println(msg);
Object obj = p.proceed();
System.out.println("调用目标组件业务方法后");
return obj;
} @AfterThrowing(pointcut="within(com.hlcui.controller..*)",throwing="e")
public void logger3(Exception e){
StackTraceElement[] eles = e.getStackTrace();
System.out.println(eles[0].toString());
}
}
3:运行测试方法
通过结果可以看出,通过注解声明方面组件成功切入目标组件。
spring核心之AOP学习总结二的更多相关文章
- spring核心之AOP学习总结一
一:springAOP前置通知.后置通知以及最终通知 前置通知就是在切入点前面执行方面体,后置就是在后面,最终就是返回之后. 下面以一个日志记录的案例介绍: 1:创建controller类 /** * ...
- aop学习总结二------使用cglib动态代理简单实现aop功能
aop学习总结二------使用cglib动态代理简单实现aop功能 模拟业务需求: 1.拦截所有业务方法 2.判断用户是否有权限,有权限就允许用户执行业务方法,无权限不允许用户执行业务方法 (判断是 ...
- Spring IOC及AOP学习总结
一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.还有一类是ApplicationContext.BeanFactory提供了基础的容器功能.Appl ...
- Spring核心框架 - AOP的原理及源码解析
一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...
- Spring自学教程-AOP学习(五)
Spring中的AOP 一.概述 (一)基本概念 1.什么是AOP? 面向方面编程.所谓方面即是指日志.权限.异常处理.事务处理等. 2.AOP的3个关键概念 (1)切入点(Pointc ...
- AOP学习笔记二
Spring AOP采用Java作为AOP的实现语言(AOL),学习曲线平滑,Spring AOP对AspectJ也提供了很好的集成与支持.最为第二代的AOP,采用动态代理机制和字节码生产技术实现,在 ...
- Spring核心框架 - AOP的起源及介绍
一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...
- Spring Core Programming(Spring核心编程) - AOP Concepts(AOP基本概念)
1. What is aspect-oriented programming?(什么是面向切面编程?) Aspects help to modularize cross-cutting concern ...
- Spring核心框架 - AOP之动态代理机制
动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码.动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类. ...
随机推荐
- C语言 · 乘法运算
算法提高 乘法运算 时间限制:1.0s 内存限制:512.0MB 问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有 ...
- session过期跳出irame
在登录页底部加入 <script type="text/javascript"> if (window != top) top.location.href = loca ...
- ApplicationContextAware接口的作用
1/============== 在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器 ...
- 微信小程序滚动Tab实现左右可滑动切换
--------------------------------------------------------wxml---------------------------------------- ...
- Sublime Text 3 For Mac
安装 Sublime Text 3 下载地址:http://www.sublimetext.com/3 我此时使用的是Build 3083版本. 安装 Package Control 这个是精华所在, ...
- Java 之 File
11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...
- go ftp通信
main.go package main import ( "strings" ftp4go "github.com/shenshouer/ftp4go" &q ...
- 如何配置propagation
配置spring事务代理时的事务属性. <prop key=“get*”>PROPAGATION_REQUIRED,readOnly</prop> 表示类方法名称是以get开头 ...
- Android 8 AudioPolicy 分析
AudioTrack最终会调用AudioPolicyManager::getOutput(); frameworks\av\services\audiopolicy\managerdefault\Au ...
- 移动端微信应用开发总结(function ajax meta)
关键字:document function ajax jquery html5 meta 微信应用开发时,特意把各个容易混淆的知识点和要点,梳理后记录下来,也分享给各位.有问题还请多指正. 一 文档载 ...