springaop:为日志传递参数

springaop:为日志传递参数,spring,dependency-injection,aop,aspectj,aspect,Spring,Dependency Injection,Aop,Aspectj,Aspect,我们使用org.springframework.beans.factory.BeanFactoryAware来运行一系列命令。系统的所有服务都使用一个服务来执行审核日志记录。此审核日志记录服务需要在我们的BeanFactoryAware实现中设置的唯一标识符 现在,这个唯一标识符正在每个函数调用中传递。一种选择是使用某种类型的上下文对象进行传递。最好不要这样做,因为这会降低系统中不了解BeanFactoryAware系统的其他部分对服务的可用性 是否有某种AOP方法可以实现更清洁的解决方案?审计

我们使用org.springframework.beans.factory.BeanFactoryAware来运行一系列命令。系统的所有服务都使用一个服务来执行审核日志记录。此审核日志记录服务需要在我们的BeanFactoryAware实现中设置的唯一标识符

现在,这个唯一标识符正在每个函数调用中传递。一种选择是使用某种类型的上下文对象进行传递。最好不要这样做,因为这会降低系统中不了解BeanFactoryAware系统的其他部分对服务的可用性

是否有某种AOP方法可以实现更清洁的解决方案?审计日志可以在BeanFactoryAware和审计代码之间的所有代码都不知道该值的情况下获取唯一标识符

根据请求,以下是一些代码:

public class ChainRunner implements BeanFactoryAware
{
  public int runChain(String chainName, Object initParameters, int msgLinkId) throws Exception {
    OurContext ctx = createContext(initParameters);
    ctx.setMsgLinkId(msgLinkId);
    createChain(chainName).execute(ctx);    
    return retval;
  }
}

public class AServiceImpl implements AService
{
    private LoggingService logger;

    public LoggingService getLogger() {
        return logger;
    }

    public void setLogger(LoggingService logger) {
        this.logger = logger;
    }

    public void aMethod(object params, int msgLinkId)
    {
        // lots of code snipped
        logger().saveActionA( msgLinkId, otherParams);
    }
}

public interface LoggingService
{
  public void saveActionA(int msgLinkId, Object otherParams);
}
ChainRunner将msgLinkId添加到链的上下文中。每条消息都会将msgLinkId从上下文中拉出来,并将其作为整数参数向下传递到服务中,例如AServer.aMethod。最后,服务需要在LoggerService上记录活动,并向其传递有关记录内容的参数,其中第一个参数是msgLinkId

目前,所有服务都通过XML配置连接:

<bean id="loggerService" class="com.nowhere.LoggingServiceImpl"/>   

<bean id="aService" class="com.nowhere.AServiceImpl">
    <property name="logger"  ref="loggerService" />
</bean> 

因此,问题是:是否可以使用AOP让msgLinkId跳转到LoggingService,而无需将其传递到多个服务层?

您的日志服务是否有一种方法可以接受日志对象并将id封装在其中?是否有一些源代码可以更好地传达您的情况和需求?我想看看你提到的对象是如何一起玩的,以及唯一ID存储在哪里,因为知道ID的对象就是你需要从中检索它的对象。这听起来在某个方面很容易做到,但请给我们一些开始。