在Controller中使用AOP

转:http://usherlight.iteye.com/blog/1306111

在Controller中使用AOP的问题主要在于如何让Controller能够被检测到。 
Controller和其他Spring bean的区别在于:Controller是由mvc定义并在web.xml中的dispatcher中定义的。

解决方法: 
1、正确定义Controller,(比较通用的做法,没有特殊情况的话,大部分应用没有这个问题) 
    a. 将服务层的类都放在ApplicationCotext-*.xml中定义,在context listener中初始化(注意,任何Controller都不应该在这里出现),要包括<aop:aspectj-autoproxy/>, 在这里,有没有proxy-target-class="true" 没有关系(具体含义参看下文) 
    b. 定义mvc的配置文件,一般是 <<servlet name>>-servlet.xml,一般(也是推荐做法)使用auto scan来定义所有的Controller.关键步骤来了:这个文件也要加入<aop:aspectj-autoproxy proxy-target-class="true"/>, 一定要添加proxy-target-class="true"! 这是用于通知Spring使用cglib而不是jdk的来生成代理方法。 
    c. 另外一个事项,Controller需要使用@Controller注释,而不是继承abstract Controller。 
    d. 建议使用aspectj来完成aop

时间: 2024-10-15 03:46:30

在Controller中使用AOP的相关文章

利用多态,实现一般处理程序(ashx)中的AOP(切面编程)

本文是对工作中的项目进行代码优化(完善登陆验证的AOP切面编程)时,所遇到的各种解决方案思考过程. 项目背景:由ashx+nvelocity构建的简单B/S问卷系统,现需要优化登录验证环节(时隔若干个月在回顾代码果然是一个痛苦的过程~) nvelocity是velocity框架针对.net的版本,核心是拼html字符串后返回客户端,与MVC的前后端代码隔离有异曲同工之妙.加之一般处理程序ashx不需要像asp.net那样走生成控件树的过程,执行上更是省时省力.故简单系统用ashx+nveloci

Spring中的AOP(五)——在Advice方法中获取目标方法的参数

摘要: 本文介绍使用Spring AOP编程中,在增强处理方法中获取目标方法的参数,定义切点表达式时使用args来快速获取目标方法的参数. 获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Ob

spingAOP在springMVC中的使用(我用在拦截controller中的方法。主要用于登录控制)

首先截取了网上的一张配置execution的图片 我在项目中关于aop的配置:如果拦截controller的方法,需要在spring-mvc.xml文件中加入(如果在spring.xml中加入则无法拦截controller层方法) 使用 and not 来排除对某些方法的拦截 <!--let spring know to use cglib not jdk --> <aop:aspectj-autoproxy proxy-target-class="true" /&g

ASP.NET MVC中有关AOP的编程

AOP(Aspect oriented programming)面向切面编程,主要意思是把相同.相似的并且零散的逻辑抽离出来,统一处理,这样不仅维护起来方便,也使得代码更加关注自己本身,清晰明了. 比如我们常见的权限检查,验证登陆,异常处理等都是散乱在系统各个地方,比如管理员在登陆状态才可以添加一个学生信息: public ActionResult AddStudent(Student student) { if (currentUser != null) { StudentDAL.Add(st

MVC中的AOP思想——Filter

一,AOP(Aspect Oriented Programming) 在谈AOP之前,我们先来说OOP(Object Oriented Programming),这是接触每一门编程语言的时候,都会先学的东西.众所周知,OOP有三个特征:封装,继承,多态.这是从类的角度来说的,如果我们把系统中的关系用UML图来表示的话,会发现有点儿类似树的结构,这棵树是从上到下的或者是从下到上的,是一个竖直的结构. 但是AOP不同,AOP是一个水平的结构.在一个系统中,我们可能会遇到这样的情况,当我们写了一大段业

Spring4.0MVC学习资料,Controller中的方法详解和使用(四)

在以前,mvc的框架,基本上就是struts框架了.但是现在不一样了.springmvc出来了.spring的mvc框架不亚于struts了,springmvc出来了,我们有了更多的选择. Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 We

Spring的Aspect切面类不能拦截Controller中的方法

根本原因在于<aop:aspectj-autoproxy />这句话是在spring的配置文件内,还是在springmvc的配置文件内.如果是在spring的配置文件内,则@Controller中的方法不会被拦截. 看一下applicationContext.xml中bean扫描的配置,此处排除了controller层的扫描: <context:component-scan base-package="com"> <context:exclude-filt

SpringBoot应用中使用AOP记录接口访问日志

SpringBoot应用中使用AOP记录接口访问日志 本文主要讲述AOP在mall项目中的应用,通过在controller层建一个切面来实现接口访问的统一日志记录. AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP的相关术语 通知(Advice) 通知

spring中的aop注解(整合junit测试)

使用spring中的aop前先来了解一下spring中aop中的一些名词 Joimpoint(连接点):目标对象中,所有可能增强的方法 PointCut(切入点):目标对象,已经增强的方法 Advice(通知/增强):增强的代码 Target(目标对象):被代理对象 Weaving(织入):将通知应用到切入点的过程 Proxy(代理):将通知织入到目标对象之后,形成代理对象 aspect(切面):切入点+通知 一:不使用spring的aop注解 以javaEE中的service层为例 UserS