`

java,spring,aspectj

阅读更多

          最近要项目有个新需求,统计查询的接口要进行性能监控,记录日志;对时间参数进行验证。想了想用spring的aop 处理一下。第一次接触aop ,第一次配置,遇到诸多问题。现在tomcat依然起不来,应该是jar version有问题,也可能是jar包之间有冲突。只能在ApplicationContext beanFactory= new ClassPathXmlApplicationContext("*applicationContext*.xml") 加载,测试可以通过。废话少说,代码贴上(仅是架子,没有完整功能实现)

 

一)切面class定义

package cn.com.superv.ead.common;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class LogAspect{  
    //任何通知方法都可以将第一个参数定义为 org.aspectj.lang.JoinPoint类型  
 private Long startTime  ;
 private Long endTime ;
 private JoinPoint call ;
 @Before("execution(public* cn.com.superv.ead.manager.*.*(..)) || execution(* cn.com.superv.hibernate.base.manager.*.*(..))")
    public void doBefore(JoinPoint call)
    {  
        this.startTime = System.currentTimeMillis() ;  
        System.out.println("log Start method: " + call.getTarget().getClass().getName() + "."+ call.getSignature().getName());
    }  
 @After("execution(public* cn.com.superv.ead.manager.*.*(..)) || execution(* cn.com.superv.hibernate.base.manager.*.*(..))") 
    public void doAfter(JoinPoint call)  
    {  
     System.out.println("log Ending method: " + call.getTarget().getClass().getName() + "."+ call.getSignature().getName());
    } 
 @Around("execution(public* cn.com.superv.ead.manager.*.*(..)) || execution(* cn.com.superv.hibernate.base.manager.*.*(..))")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
     
     long time = System.currentTimeMillis();  
        Object retVal = pjp.proceed();  
        time = System.currentTimeMillis() - time;  
        System.out.println("process time: " + time + " ms");  

        return retVal; 

    }  
 @AfterThrowing("execution(public* cn.com.superv.ead.manager.*.*(..)) || execution(* cn.com.superv.hibernate.base.manager.*.*(..))")  
    public void doThrowing() {  
        System.err.println(" ------------------advice 'doThrowing' say : is some exception here !-----------" );
    }

   

二)application*.xml 配置

    

     1:切面配置

          <?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!----由于切面class已注解的方式设置了各个属性,这里只需开启代理-->
     <aop:aspectj-autoproxy proxy-target-class="true"/>

    <!----此处省略bean定义-->

       <bean>xxxxxxxxxxx</bean>

</beans>

    

  

 

三) 测试类附上

 

 

    package cn.com.superv.ead.manager.test;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

import org.apache.commons.lang.StringUtils;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.com.superv.ead.intf.netmessagemanage.SndPIMItemL;
import cn.com.superv.ead.manager.EadNMWapSendManager;
import cn.com.superv.hibernate.base.manager.UserInfoManager;
/**
 * @author Administrator
 * NetMessage_OP
 * 2011-10-31 下午01:20:37 
 * Description:
 */
@Aspect
public class LogAspectTest extends TestCase{  
 private static final ApplicationContext beanFactory= new ClassPathXmlApplicationContext("*applicationContext*.xml");     
   
//    protected void setUp() throws Exception {  
//        beanFactory=new ClassPathXmlApplicationContext("applicationContext*.xml");  
//    }  
     
    public void testLogAspect()  
    {  
     UserInfoManager service=(UserInfoManager)beanFactory.getBean("UserInfoManager");  
        System.out.println(service.getAllSpArea());          
    }
    public void testEADWapSendManager(){
      EadNMWapSendManager eadnmwapsendmanager=(EadNMWapSendManager)beanFactory.getBean("EADNMWapSendManager");  
      List<String> mdnList = new ArrayList<String>();
        mdnList.add("15821888419");
        mdnList.add("13764615783");
        mdnList.add("13466629031");
        mdnList.add("13512122513");
        String mdnStr = StringUtils.join(mdnList , "','");
        List<SndPIMItemL> objList =  eadnmwapsendmanager.getSendDetailListByCondition("10205238", "2011-01-01", "2011-06-01", "0", mdnStr, 10099740);
        for(SndPIMItemL sp : objList)
       System.out.println(sp.getResultCause()+"-------"+sp.getPhoneNbr()+"-------"+sp.getSndTime());
    }
    public static void main(String[] args) {
     LogAspectTest LogAspectTest = new LogAspectTest();
     LogAspectTest.testEADWapSendManager();
     LogAspectTest.testLogAspect();
 }

 

 

四)测试结果

    [INFO ](SimpleThreadPool.java:247) - 2011-11-16 19:36:47,640 Job execution threads will use class loader of thread: main
[INFO ](QuartzScheduler.java:195) - 2011-11-16 19:36:47,656 Quartz Scheduler v.1.5.2 created.
[INFO ](RAMJobStore.java:138) - 2011-11-16 19:36:47,656 RAMJobStore initialized.
[INFO ](StdSchedulerFactory.java:1014) - 2011-11-16 19:36:47,656 Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[INFO ](StdSchedulerFactory.java:1018) - 2011-11-16 19:36:47,656 Quartz scheduler version: 1.5.2
[INFO ](QuartzScheduler.java:1853) - 2011-11-16 19:36:47,671 JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@1183871
[INFO ](QuartzScheduler.java:400) - 2011-11-16 19:36:47,671 Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
log Start method: cn.com.superv.ead.manager.impl.EadNMWapSendManagerImpl.getSendDetailListByCondition
log Ending method: cn.com.superv.ead.manager.impl.EadNMWapSendManagerImpl.getSendDetailListByCondition
process time: 328 ms
null-------15821888419-------2011-02-20 05:12
null-------13764615783-------2011-02-20 04:58
null-------15821888419-------2011-02-20 04:58
null-------15821888419-------2011-02-20 04:58
log Start method: cn.com.superv.hibernate.base.manager.impl.UserInfoManagerImpl.getAllSpArea
log Ending method: cn.com.superv.hibernate.base.manager.impl.UserInfoManagerImpl.getAllSpArea
process time: 141 ms
[null, null, null, null,

 

 

五)tomcat 启动异常如下

     [ERROR](ContextLoader.java:204) - 2011-11-16 19:32:13,218 Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext-hibernate.xml]: Instantiation of bean failed; nested exception is java.lang.AbstractMethodError: org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.determineConstructor(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Constructor;
Caused by:
java.lang.AbstractMethodError: org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.determineConstructor(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Constructor;
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:736)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:709)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4252)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
 at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
 at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:448)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
[ERROR](StandardContext.java:3799) - 2011-11-16 19:32:13,250 Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext-hibernate.xml]: Instantiation of bean failed; nested exception is java.lang.AbstractMethodError: org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.determineConstructor(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Constructor;
Caused by:
java.lang.AbstractMethodError: org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.determineConstructor(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Constructor;
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:736)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:709)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4252)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
 at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
 at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:448)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2011-11-16 19:32:13 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2011-11-16 19:32:13 org.apache.catalina.core.StandardContext start
严重: Context [/EadService] startup failed due to previous errors     

  

分享到:
评论

相关推荐

    spring aspectj.jar

    《Spring AOP与AspectJ深度解析》 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,Spring的面向切面编程(AOP)特性极大地简化了代码的维护和扩展。AspectJ是Spring AOP的重要组成部分,...

    Spring AspectJ的学习一

    **Spring AspectJ 学习详解** 在Java世界中,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力而闻名。AspectJ是AOP领域的一个强大工具,它扩展了Java语言,允许开发者创建所谓的"切面",来封装横切...

    spring基于AspectJ实现事务控制

    在企业级Java应用开发中,Spring框架以其强大的功能和易用性成为了不可或缺的一部分。而事务管理是数据库操作的核心环节,确保数据的一致性和完整性。在Spring框架中,提供了多种事务管理方式,其中之一就是基于...

    Spring 使用AspectJ 实现 AOP之前置通知小例子

    标题提到的"Spring 使用AspectJ 实现 AOP之前置通知小例子",指的是利用AspectJ在Spring中实现AOP的一种特定类型的通知——前置通知(Before advice)。前置通知在目标方法执行之前运行,但不会阻止方法的执行。这种...

    Spring AOP @AspectJ 入门实例

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Spring AOP(面向切面编程)则是其核心特性之一,用于实现横切关注点的模块化,如日志、事务管理等。本实例将带你深入理解并实践Spring AOP与@AspectJ的结合...

    spring AspectJ aop学习

    在IT行业中,Spring框架是Java开发中的一个核心组件,它为开发者提供了许多强大的功能,包括依赖注入、数据访问、事务管理等。而AspectJ则是一个面向切面编程(AOP)的工具,它允许程序员在不修改源代码的情况下,...

    JavaSpring的依赖包(包含切面AspectJ)

    总的来说,这个压缩包提供的组件能够帮助开发者构建一个基于Spring的、利用AspectJ进行切面编程的Java应用。通过Spring的依赖注入和AOP,我们可以编写出更加模块化、易于维护的代码,同时,Log4j则提供了方便的日志...

    Spring的AOP依赖包-AspectJ

    而AspectJ是Java平台上的一个开源项目,提供了一种强大的、类型安全的AOP解决方案,它能够与Spring框架完美结合,增强Spring的AOP功能。 首先,我们需要理解AOP的核心概念。切面(Aspect)是关注点的模块化,这些...

    Spring AOP之基于AspectJ注解总结与案例

    AspectJ是Java平台上的一个开源项目,提供了全面的面向切面编程支持,包括编译时织入和运行时织入。本篇内容将对Spring AOP中基于AspectJ注解的使用进行总结,并通过实际案例进行解析。 首先,让我们理解AspectJ...

    spring和aspectj的aop实验

    Spring框架是Java开发中广泛使用的轻量级容器,它不仅支持依赖注入,还提供了AOP功能。AspectJ则是一个独立的AOP框架,它提供了更强大和灵活的切面实现方式,可以直接编译源代码或字节码来织入切面。 标题"spring和...

    Java Spring框架依赖包

    5. spring-aspects:提供了与AspectJ的集成。 6. spring-jdbc:简化了JDBC操作。 7. spring-tx:提供了事务管理支持。 8. spring-web:为Web应用提供基础支持。 9. spring-webmvc:Spring MVC模块,用于构建Web应用...

    aspectj的jar spring使用aop需要的jar

    10. **配置方式**:在Spring中,可以通过XML配置或使用Java配置类来启用AspectJ支持,并声明切面和其相关通知。 综上所述,为了在Spring中利用AspectJ的全部功能,你需要将对应的AspectJ JAR文件加入到项目类路径中...

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    AspectJ是Java平台上的一个开源AOP框架,提供了丰富的语法来定义切面。本教程将探讨如何在Spring中结合AspectJ实现AOP,包括基于XML配置和基于注解的方式。 **一、AOP基本概念** AOP的核心概念有切面(Aspect)、...

    spring源码导入所需aspectj包

    在Spring框架中,AspectJ是一种强大的面向切面编程(AOP)工具,它允许开发者定义“切面”——即跨越多个对象的行为或属性。这些切面可以用来封装那些分散在整个应用中的横切关注点,例如日志、事务管理或者安全控制...

    Spring 使用AspectJ 实现 AOP

    Spring 框架是Java开发中的一个核心组件,它提供了许多功能,其中之一就是面向切面编程(AOP)。AOP是一种编程范式,允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理等。在Spring中,我们可以使用...

    java Spring aop所需Jar包

    综上所述,Java Spring AOP通过引入AspectJ库和AOP Alliance,实现了对代码的关注点分离,提高了代码的可维护性和可扩展性。理解并熟练使用这些工具和概念,能够帮助开发者编写出更加优雅和高效的应用程序。

    [JAVA SPRING AOP]aspectj-1.8.13.jar & aspectjrt-1.8.0.RELEASE.jar

    Spring 中基于 AOP 的 XML架构 所需要的jar文件. 网上找不到的同学可以在...包括 aspectj-1.8.13.jar & aspectjrt-1.8.0.RELEASE.jar & aspectjweaver-1.8.0.RELEASE.jar & spring-aopalliance-1.0.jar四个jar文件.

    Spring @AspectJ 实现AOP 入门例子

    在Java世界中,Spring框架是企业级应用开发的首选,它提供了一系列强大的功能,包括依赖注入、面向切面编程(AOP)等。本篇文章将深入探讨如何利用Spring的@AspectJ注解来实现AOP,这是一个入门级别的例子,旨在帮助...

    jar包---Spring Aop AspectJ新增包.rar

    在"jar包---Spring Aop AspectJ新增包.rar"这个压缩文件中,我们可以预见到它包含了用于支持Spring AOP和AspectJ功能的必要库文件。 Spring AOP的实现主要有两种方式:一种是基于代理的AOP(Proxy-based AOP),另...

    Spring2.5使用AOP需要的aspectJ

    AspectJ是一个成熟的AOP框架,Spring在其AOP实现中整合了AspectJ,提供了更强大的面向切面编程能力。本篇文章将详细探讨在Spring 2.5中使用AspectJ进行AOP开发所需的知识点。 首先,我们需要理解AOP的核心概念: 1....

Global site tag (gtag.js) - Google Analytics