2017-05-27 28 views
0

:にBusinessServiceの.java春エラーorg.springframework.aop.config.internalAutoProxyCreatorそれはfollows-としてあるために、私は春AOP.Theコードのための簡単なプログラムを実行しようとしています

package com.kruders.spring.aop; 

public interface BusinessService { 
    void doSomeThing(); 
} 

BusinessImpl.java

package com.kruders.spring.aop; 

import org.springframework.stereotype.Service; 

public class BusinessImpl implements BusinessService { 
    public void doSomeThing() { 
     System.out.println("Do Something Here"); 
    } 
} 

BusinessAspect.java

package com.kruders.spring.aspect; 

import org.aspectj.lang.ProceedingJoinPoint; 

public class BusinessAspect { 
    public void before() { 
     System.out.println("Before method is called"); 
    } 

    public void after() { 
     System.out.println("After method is called"); 
    } 

    public void afterReturning() { 
     System.out.println("After returning method is called"); 
    } 

    public void afterThrowing() { 
     System.out.println("After throwing method is called"); 
    } 

    public void around(ProceedingJoinPoint joinPoint) throws Throwable { 
     System.out.println("Around method is called"); 
     System.out.println("Around before is running"); 
     joinPoint.proceed(); 
     System.out.println("Around after is running"); 
    } 
} 

Main.java

package com.kruders.spring.core; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import com.kruders.spring.aop.BusinessService; 

public class Main { 
    public static void main(String args[]) { 
     ApplicationContext appContext = new ClassPathXmlApplicationContext("Spring-Business.xml"); 
     BusinessService businessService = (BusinessService)appContext.getBean("businessService"); 
     businessService.doSomeThing(); 
    } 
} 

春Business.xml

<?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" 
    xmlns:context="http://www.springframework.org/schema/context" 
    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-3.0.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <bean id="businessService" class="com.kruders.spring.aop.BusinessImpl" /> 
    <!-- Aspect --> 
    <bean id="businessAspect" class="com.kruders.spring.aspect.BusinessAspect" /> 

    <aop:config> 
     <aop:aspect ref="businessAspect"> 
      <aop:pointcut id="businessExp" 
          expression="execution(* com.kruders.spring.aop.BusinessImpl*.*(..))" /> 
      <aop:before 
        method="before" 
        pointcut-ref="businessExp"/> 
      <aop:after 
        method="after" 
        pointcut-ref="businessExp"/> 
      <aop:after-returning 
        method="afterReturning" 
        pointcut-ref="businessExp"/> 
      <aop:after-throwing 
        method="afterThrowing" 
        pointcut-ref="businessExp"/> 
      <aop:around 
        method="around" 
        pointcut-ref="businessExp"/> 
     </aop:aspect> 
    </aop:config> 
</beans> 

私はすべてのAOPのjarファイルが含まれていると春-4.3.6

Spring Aop Jars-: 

aspectj-1.6.9,aspectj-DEVELOPMENT-20160512153500,aspectjrt,aspectj-weaver,spring-aop jars 

を使用して、それでもTHSエラーを得ています。

INFO: Refreshing org[email protected]621be5d1: startup date [Sat May 27 08:59:02 IST 2017]; root of context hierarchy 
May 27, 2017 8:59:02 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [Spring-Business.xml] 
May 27, 2017 8:59:02 AM org.springframework.aop.framework.DefaultAopProxyFactory <clinit> 
INFO: CGLIB2 not available: proxyTargetClass feature disabled 
May 27, 2017 8:59:02 AM org.springframework.context.support.ClassPathXmlApplicationContext refresh 
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Initialization of bean failed; nested exception is java.lang.AbstractMethodError: org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors()Ljava/util/List; 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.config.internalAutoProxyCreator': Initialization of bean failed; nested exception is java.lang.AbstractMethodError: org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors()Ljava/util/List; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:223) 
    at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:702) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:527) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.kruders.spring.core.Main.main(Main.java:10) 
Caused by: java.lang.AbstractMethodError: org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors()Ljava/util/List; 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.setBeanFactory(AbstractAdvisorAutoProxyCreator.java:57) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1647) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1615) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 
    ... 11 more 
+0

エラースタックトレース 'java.lang.AbstractMethodError'によって、' abstract'とマークされたメソッドを呼び出しているようです。 – harshavmb

+0

私はクラスのBusinessImplで抽象メソッドの実装を提供していますが、コードが正常に動作するのは、すべてのclaaとインターフェイスが同じパッケージにある場合です。 –

+0

それは私にとってはうまく見えます。 'java.lang.AbstractMethodError:org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors()'をチェックしています。あなたのクラスパスに古い春の瓶がありますか?これはmvnプロジェクトですか? – harshavmb

答えて

0

これはクラスパスの問題です。 aspectjspring-aop jarsの間のいくつかの競合については、hereと説明しています。

を持っているが、Mavenプロジェクトにプロジェクトを移植し、以下のメインクラスでもpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>springaop</groupId> 
    <artifactId>springaop</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <resources> 
      <resource> 
       <directory>src</directory> 
       <excludes> 
        <exclude>**/*.java</exclude> 
       </excludes> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.5.1</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>4.3.8.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>4.3.8.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 


    </dependencies> 
</project> 

で、

ApplicationContext appContext = new ClassPathXmlApplicationContext("Spring-Business.xml"); 

appContextが閉じていないと言って警告しています。 appContextは、I/O操作を実行するResourceLoaderであり、I/O操作を実行した後にリソースを解放することが不可欠です。だから、最後にリソースを解放する.close()メソッドを持っているClassPathXmlApplicationContextに変更した、あなたはより正確にfinallyブロックで行うことができます。締結する

、主な方法は以下のようになります。

ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
       "Spring-Business.xml"); 
     BusinessService businessService = (BusinessService) appContext.getBean("businessService"); 
     businessService.doSomeThing(); 
     appContext.close(); 

は、この情報がお役に立てば幸い!がんばろう!

0

aopaplliance-alpha1.jarにはAdviceクラスが含まれていないため、aopalliance-1.0.jarファイルを別途ダウンロードして、依存関係に追加する必要があります。

ファイルを持つ1つのリンクはhereです。

関連する問題