当前位置:编程学习 > JAVA >>

spring 面向切口编程出现的一个bug折磨了我好久啊!!


java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.internal.runners.TestClassMethodsRunner.createTest(TestClassMethodsRunner.java:52)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:58)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAOImpl' defined in file [D:\spingWorkSpace\Spring_08_annotation_component\bin\com\huanghui\daoImpl\UserDAOImpl.class]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:405)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.huanghui.service.UserServiceTest.<clinit>(UserServiceTest.java:12)
... 16 more
Caused by: java.lang.NullPointerException
at org.aspectj.weaver.WeakClassLoaderReference.<init>(WeakClassLoaderReference.java:45)
at org.aspectj.weaver.tools.PointcutParser.setClassLoader(PointcutParser.java:228)
at org.aspectj.weaver.tools.PointcutParser.<init>(PointcutParser.java:215)
at org.aspectj.weaver.tools.PointcutParser.getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(PointcutParser.java:130)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.<init>(AspectJExpressionPointcut.java:123)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.<init>(AspectJExpressionPointcut.java:136)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getPointcut(ReflectiveAspectJAdvisorFactory.java:144)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisor(ReflectiveAspectJAdvisorFactory.java:129)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory$1.doWith(ReflectiveAspectJAdvisorFactory.java:74)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:466)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:443)
at org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.getAdvisors(ReflectiveAspectJAdvisorFactory.java:70)
at org.springframework.aop.aspectj.annotation.BeanFactoryAspectJAdvisorsBuilder.buildAspectJAdvisors(BeanFactoryAspectJAdvisorsBuilder.java:110)
at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.findCandidateAdvisors(AnnotationAwareAspectJAutoProxyCreator.java:85)
at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:105)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:281)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:791)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:762)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:399)
... 29 more

bug --------------------编程问答-------------------- UserDAOImpl 找找看 是否创建成功 --------------------编程问答-------------------- 您好,类创建好了,就是不能引进AOP,如果不用@aspect这个注解就能运行,可是加上这个注解,就报上面的错误,我估计可能是环境问题引起的,可是无法解决! --------------------编程问答-------------------- LZ,你是用标记去创建自己的AOP切割类吧,那检查下有没有这些:

spring.xml
(1)增加<aop:aspectj-autoproxy/>
(2)增加<context:component-scan base-package="切割类包名" />

XXX.java
(3)在头顶上@Aspect的下面增加一下@Component(spring扫描标记)
然后再试试
--------------------编程问答-------------------- 这个有小demo
http://download.csdn.net/detail/zuxianghuang/4138590 --------------------编程问答-------------------- 还要是pointcut吧 --------------------编程问答--------------------

<!-- 参与缓存的切入点对象 (切入点对象,确定何时何地调用拦截器) -->
<bean class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<!-- 配置缓存切面 -->
<property name="advice" ref="cacheMethodInterceptor" />
<!--
配置哪些方法参与缓存策略 .表示符合任何单一字元 ### +表示符合前一个字元一次或多次 ### *表示符合前一个字元零次或多次 ###
\Escape任何Regular expression使用到的符号
-->
<!-- .*表示前面的前缀(包括包名) 表示print方法-->
<property name="patterns">
<list>
<value>
<!-- com.shadow.mvc.service\..Service.*\.find.*   -->
com.shadow.mvc.service.impl.BrandService.*\.find.*
</value>
</list>
</property>
</bean>

<aop:config></aop:config>

<!-- 配置一个缓存拦截器对象,处理具体的同步缓存业务 -->
<bean id="cacheMethodAfterAdvice" class="com.shadow.extras.cache.CacheMethodAfterAdvice">
<property name="memCachedClient" ref="memCachedClient" />
</bean>
<aop:config>
<aop:aspect id="methodCachePointCutAdviceAspect" ref="cacheMethodAfterAdvice">
<aop:after method="afterReturning"
pointcut="execution(* com.shadow.mvc.service.*Service.modify*(..))" />
<aop:after method="afterReturning"
pointcut="execution(* com.shadow.mvc.service.*Service.save*(..))" />
<aop:after method="afterReturning"
pointcut="execution(* com.shadow.mvc.service.*Service.remove*(..))" />
</aop:aspect>
</aop:config>

<!-- 开启代理模式 -->
<!-- <aop:aspectj-autoproxy proxy-target-class="true"/>  -->
<aop:aspectj-autoproxy />

<!--
enable component scanning (beware that this does not enable mapper
scanning!)
-->
<context:component-scan base-package="com.shadow" />


要开启模式 --------------------编程问答-------------------- 问题找到了,原来是我的扎包user liblary设置成了System扎了!蛋疼啊!
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,