学习JavaWeb aop两种配置方式
aop
aop:面向切面编程,它可以解决重复代码。
aop有两种方式:
一、.xml方式
1、在springmvc-servlet.xml中配置aop,应用bean文件;
<!--aop配置-->
<aop:config>
<aop:aspect id="log" ref="loging">
<!--第一个星号:返回值
第二个星号:类
第三个星号:方法
小括号:方法入参-->
<aop:pointcut id="print" expression="execution(* com.dait.controller.*.*(..))"/>
<!-- <aop:before pointcut-ref="print" method="doBefore"/>
<aop:after pointcut-ref="print" method="doAfter"/>-->
<aop:around pointcut-ref="print" method="doAround"/>
<aop:after-throwing pointcut-ref="print" method="doThrowing" throwing="ex"/>
</aop:aspect>
</aop:config>
2、在bean文件的类上加@Component
@Component
public class Loging {
/**
* 目标方法执行之前调用
* @param
*/
/* public void doBefore(JoinPoint jp) {
System.out.println(">>>>>doBefore>>>>>>>log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
}*/
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println(">>>>>doAround>>>>>>>log Begining method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());
Object retVal = pjp.proceed();//执行目标方法
System.out.println(">>>>>doAround>>>>>>>log Ending method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());
return retVal;
}
}
二、采用注解的方式
1、在springmvc-servlet.xml文件中添加注解配置
<!--启用注解代理-->
<aop:aspectj-autoproxy/>
2、在bean文件上添加@Component和@Aspect,缺一不可
@Component
@Aspect
public class LogingAnnotation {
public void doBefore(JoinPoint jp) {
System.out.println(">>>>>doBefore>>>>>>>log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
}
@Around("execution(* com.dait.controller.*.*(..))")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
long time = System.currentTimeMillis();
System.out.println(">>>>>doAround>>>>>>>log Begining method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());
Object retVal = pjp.proceed();//执行目标方法
System.out.println(">>>>>doAround>>>>>>>log Ending method: " + pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName());
time = System.currentTimeMillis() - time;
//pjp.getTarget().getClass().getName() 目前类包+类名
//pjp.getSignature().getName() 目标方法
return retVal;
}
public void doAfter(JoinPoint jp) {
System.out.println(">>anno>>>doAfter>>>>>>>log Ending method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
}
public void doThrowing(JoinPoint jp, Throwable ex) {
System.out.println(">>anno>>>doThrowing>>>>>>>method " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName() + " throw exception");
System.out.println(ex.getMessage());
}
}
学习JavaWeb aop两种配置方式的更多相关文章
- spring aop两种配置方式
基于注解的Spring AOP开发 简单案例快速入门 定义目标类接口和实现类 /** * Created by zejian on 2017/2/19.*/ //接口类 public interfac ...
- spring aop两种配置方式(1)
第一种:注解配置AOP注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before ...
- java框架篇---spring aop两种配置方式
第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...
- hibernate 一对一 one to one的两种配置方式
hibernate中one-to-one两种配置方式 标签: hibernateHibernateone-to-one 2013-02-19 17:44 11445人阅读 评论(1) 收藏 举报 分 ...
- Hibernate中双向多对多的两种配置方式
Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...
- (一)spring aop的两种配置方式。
sring aop的方式有两种:(1)xml文件配置方式(2)注解的方式实现,我们可以先通过一个demo认识spring aop的实现,然后再对其进行详细的解释. 一.基于注解的springAop配置 ...
- Spring AOP两种实现方式
一. AOP 概念: Spring AOP 即Aspect Oriented Programming(面向切面编程), 实现方式分为两种: 1. 注解(Annotation) 2. 配置(Config ...
- IOC容器在web容器中初始化——(一)两种配置方式
参考文章http://blog.csdn.net/liuganggao/article/details/44083817,http://blog.csdn.net/u013185616/article ...
- 第四节:框架前期准备篇之进程外Session的两种配置方式
一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤 ...
随机推荐
- HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试
No1. 必须搭建java环境 只需要最基础的java环境,也就是cmd下可以运行java和javac即可, 具体教程请自行百度,都会有很详细的教程,这里不重点介绍. No2. 下载安装HBuilde ...
- Elixir木蚂蚁支付服务器验签名方法
官方范例为java public boolean verify(String sign , String appKey , String orderId) throws UnsupportedEnco ...
- 应用Python处理空间关系数据
from osgeo import ogrimport jsonfrom geojson import loads, dumps, Feature, FeatureCollectionfrom sha ...
- 使用 Azure CLI 创建 Linux 虚拟机
Azure CLI 用于从命令行或脚本创建和管理 Azure 资源. 本指南详细介绍了如何使用 Azure CLI 部署运行 Ubuntu 服务器的虚拟机. 服务器部署以后,将创建 SSH 连接,并且 ...
- [CENTOS7] 修改机器名:hostnamectl set-hostname host.domain
# hostnamectl set-hostname host.domain
- [WinCE] Win CE 屏幕截图
VS2005自带了这个工具,这个工具的名称为:“远程放大”,其路径为:"C:\Program Files\CE Remote Tools\5.01\bin\cczoom.exe" ...
- C# 标准的MD5加密32位
标准的MD5加密32位小写的: public static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvide ...
- 纲举目张:打通MySQL架构和业务的任督二脉
目前,在很多OLTP场景中,MySQL数据库都有着广泛的应用,也有很多不同的使用方式.从数据库的业务需求.架构设计.运营维护.再到扩容迁移,不同的MySQL架构有不同的特点,适应一定的业务场景,或者解 ...
- inclusion_tag 界面的嵌套 和渲染
后端的html渲染到前端: 如果后端直接定义的是html标签,传到前端的时候因为浏览器的安全机制就会直接渲染成字符串如果想要渲染成需要的标签,就需要在后端用make_save()进行包裹,或者直接在前 ...
- windows下搭建vue开发环境
Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.2016 ...