aop aop aop aop aop aop

问题描述

aop aop aop aop aop aop

aop:config

/aop:aspect
/aop:config

package com.paic.mercury.vigilant.aop;

import org.apache.commons.logging.Log;
import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.paic.mercury.vigilant.entity.UIResult;
import com.paic.mercury.vigilant.secure.ResourceUser;
import com.paic.mercury.vigilant.utils.ServletUtil;

public class ControllerTracer {
// implements AfterReturningAdvice {

private static Logger LOG = LoggerFactory.getLogger(ControllerTracer.class);

// @Override
// public void afterReturning(Object arg0, Method arg1, Object[] arg2,
// Object arg3) throws Throwable {
// System.out.println("通常情况下睡觉之前要脱衣服!");
// }

public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
    // System.out.println("通常情况下睡觉之前要脱衣服!");
    Object retVal = pjp.proceed();

    // System.out.println("log Ending method: "
    // + pjp.getTarget().getClass().getName() + " . "
    // + pjp.getSignature().getName());
    //
    //
    //
    // LOG.info("args:" + args);
    // LOG.info("kind:" + pjp.getKind());
    // LOG.info("source location:" + pjp.getSourceLocation());
    // LOG.info("target:" + pjp.getTarget().toString());
    //
    //
    // LOG.info("USER:"+);
    // LOG.info("result:" + retVal.toString());

    String userName = "NULL";
    Object user = ServletUtil.getResourceUser();
    if (user != null && user instanceof ResourceUser) {
        userName = ((ResourceUser) user).getUsername();
    }

    StringBuffer sb = new StringBuffer();
    sb.append("User(").append(userName).append(") invoke ")
            .append(pjp.getTarget().getClass().getSimpleName()).append(".")
            .append(pjp.getSignature().getName());

    if (retVal instanceof UIResult) {
        UIResult result = (UIResult) retVal;
        if (!result.isFlag()) {
            sb.append(" ERROR! code:").append(result.getErrorCode())
                    .append(" message:").append(result.getMessage());
        }
    }
    LOG.info(sb.toString());

    // if (LOG.isDebugEnabled()) {
    Object[] args = pjp.getArgs();
    // latest arg is request.
    if (args != null && args.length > 1) {
        LOG.info("PRINTING ARGS. ===================");
        StringBuffer argSb = new StringBuffer();
        for (int index = 0; index < args.length - 1; index++) {
            Object arg = args[index];
            if (arg != null) {
                argSb.append("arg type:")
                        .append(args[index].getClass().getSimpleName())
                        .append(" value:").append(args[index] + "");
            }
            LOG.info(argSb.toString());
        }
        LOG.info("PRINTING ARGS END. ==============");
    }
    // }

    return retVal;
}
// @Override
// public void before(Method arg0, Object[] arg1, Object arg2)
// throws Throwable {
// System.out.println("起床后要先穿衣服!");
// }

}

时间: 2024-09-02 19:16:07

aop aop aop aop aop aop的相关文章

AOP与IOC的冲突/aop无法注入

问题描述 AOP与IOC的冲突/aop无法注入 项目架构同时搭建spring 和 spring mvc在分库架构体系下我打算用aop来实现分库的实现流程,我在spring xml里扫描了service,在mvc xml里扫描了controller于是在mvc里配置aop 切面aspect可以设定service为切入目标但是在spring里配置aop 切面aspect既不能设定service也不能设置controller为切入点注:使用了@controller @service注解 问题在于,无论

AOP解析:含简单AOP框架实现(包括Proxy模式实现与Attribute实现)

AOP简介: AOP(Aspect Oriented Programming)"面向切面编程",其实和OOP(Object Oriented Programming)"面向对象编程"一样是一种编程思路,而且个人以为翻译为"切面导向编程 "更为妥当,OOP也应翻译为"对象导向编程".因为正是有了"切面"和"对象"的想法和 概念才产生了"Aspect Oriented Progra

我要造轮子之基于JDK的AOP实现

1 前言 Aspect Oriented Programing,面向切面编程. 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP主要用于日志记录,性能统计,安全控制(权限控制),事务处理,异常处理等.将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码. 像Spring

什么是AOP系列之一:AOP概念解析

概念 为什么要区分J2EE容器和J2EE应用系统? 我们知道,J2EE应用系统只有部署在J2EE容器中才能运行,那么为什么划分为J2EE容器和J2EE应用系统? 通过对J2EE容器运行机制的分析,我们可以发现:实际上J2EE容器分离了一般应用系统的一些通用功能,例如事务机制.安全机制以及对象池或线程池等性能优化机制. 这些功能机制是每个应用系统几乎都需要的,因此可以从具体应用系统中分离出来,形成一个通用的框架平台,而且,这些功能机制的设计开发有一定难度,同时运行的稳定性和快速性都非常重要,必须经

Spring Framework中的AOP编程之入门篇

编程 作为这个介绍Spring框架中的面向方面编程(Aspect-Oriented Programming,AOP)的系列的第一部分,本文介绍了使您可以使用Spring中的面向方面特性进行快速开发的基础知识.使用跟踪和记录方面(面向方面领域的HelloWorld)作为例子,本文展示了如何使用Spring框架所独有的特性来声明切入点和通知以便应用方面.本系列的第二部分将更深入地介绍如何运用Spring中的所有通知类型和切入点来实现更实用的方面和面向方面设计模式. 本文的目的不是要介绍构成模块化J2

用Java动态代理实现AOP

动态 目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等.AOP似乎一时之间成了潮流.Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP.本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习AOP可以到它老家http://aosd.net去瞧瞧.这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP. 为了简单起见

AOP编程入门--Java篇

编程 Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果.比如我们最常见的就是日志记录了,举个例子,我们现在提供一个服务查询学生信息的,但是我们希望记录有谁进行了这个查询.如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(Student

C# AOP微型框架实现(一)

  在前面的系列文章中,我介绍了消息.代理与AOP的关系,这次将我自己实现的一个AOP微型框架拿出来和大家交流一下. AOP的最基本功能就是实现特定的预处理和后处理,我通过代理实现了此微型框架. 先来看看构成此微型框架的4个.cs文件. 1.CommonDef.cs 用于定义最基本的AOP接口 /************************************* CommonDef.cs ************************** using System;using Syst

基于.Net的AOP实现技术

基于.Net的AOP实现技术 前言 在笔者的<面向对象的应用服务层设计>一文中,笔者讨论了软件系统中设计应用服务层所需要考虑的问题,以及系统分层的基本思考方法.这些讨论作关注的问题,都是系统中纵向的层次的划分.然而,在设计软件系统的时候,我们不仅仅要考虑纵向的关系,很多时候,我们还需要关注所谓的"横切关注点"的问题,例如,存在于系统每个部分的日志记录.安全性验证等.AOP(面向方面编程)的出现,便是为了解决这些"横切关注点"的问题. 虽然AOP目前还不是

spring AOP的方式监控方法的执行时间

前段时间有几个同行跟我吐槽说系统响应越来越慢,优化不知道从何入手!今天写写使用spring的aop来实现方法级的执行时间的记录监控,以此来评估方法的性能以及针对性的对已存在的方法进行优化. 对于监控,我们比较关注监控的可靠性和性能,准确,高效,这才能在不影响整体性能的情况下对我们的系统性能有个较准确的认识. 对于spring aop这个我就不多介绍了,网上一搜一大把,使用过spring的人都知道spring的ioc和aop.ioc我们常用,但在我们自己的系统中,aop的使用几乎为零,除了这个监控