2016-08-09 6 views
0

私はSpring AOPを使用しようとしていますが、問題があります。 ここでは、次のとおりです。ここでSpringスローClassNotFound forカスタムАspect

Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.codarama.diet.event.aop.ProfilingAdvice] for bean with name 'profilingAdvice' defined in class path resource [META-INF/test-contexts/testProfilingAdvice.xml]; nested exception is java.lang.ClassNotFoundException: org.codarama.diet.event.aop.ProfilingAdvice 

プロファイリングアドバイスです:

package org.codarama.diet.event.aop; 

import com.google.common.base.Stopwatch; 
import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.codarama.diet.component.ListenableComponent; 
import org.codarama.diet.event.model.MinimizationEndEvent; 
import org.codarama.diet.event.model.MinimizationEvent; 
import org.codarama.diet.event.model.MinimizationStartEvent; 

import java.util.Set; 

@Aspect 
public class ProfilingAdvice extends ListenableComponent { 

    @Around("org.codarama.diet.event.aop.IndexingAspect.get()") 
    public Object profileGet(ProceedingJoinPoint pjp) throws Throwable { 
    // some code 
    } 

    @Around("org.codarama.diet.event.aop.IndexingAspect.index()") 
    public Object profileIndex(ProceedingJoinPoint pjp) throws Throwable { 
    // some more code 
    } 

    @Around("org.codarama.diet.event.aop.MinimizationAspect.minimize()") 
    public Object profileMinimize(ProceedingJoinPoint pjp) throws Throwable { 
    // and some more code 
    } 
} 

私はここで、XML設定を使用していますが、関連する部品(私は願っています)、次のとおりです。

<context:spring-configured/> 
<context:annotation-config/> 
<aop:aspectj-autoproxy/> 

... 

<bean id="indexingAspect" class="org.codarama.diet.event.aop.IndexingAspect"/> 
<bean id="minimizationAspect" class="org.codarama.diet.event.aop.MinimizationAspect"/> 
<bean id="profilingAdvice" class="org.codarama.diet.event.aop.ProfilingAdvice" parent="listenableComponent"/> 

... 

<bean id="listenableComponent" class="org.codarama.diet.component.ListenableComponent" abstract="true"> 
    <property name="eventBus" ref="statusUpdateEventBus"/> 
</bean> 

<bean id="statusUpdateEventBus" class="com.google.common.eventbus.AsyncEventBus"> 
    <constructor-arg ref="eventBusExecutor"/> 
</bean> 

<bean id="eventBusExecutor" class="java.util.concurrent.Executors" factory-method="newFixedThreadPool"> 
    <constructor-arg value="1"/> 
</bean> 

とPOM:

<org.springframework.version> 
     4.3.1.RELEASE 
    </org.springframework.version> 
    <aspectj.version>1.8.9</aspectj.version> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>${aspectj.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>${aspectj.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>aopalliance</groupId> 
     <artifactId>aopalliance</artifactId> 
     <version>1.0</version> 
    </dependency> 

長いポストは申し訳ありませんが、私はいくつかのガイドを読んで再読んでいますが、現在私はちょっと困っています。おかげさまで

+1

この 'org.codarama.diet.event.aop'パッケージに対して' context component scan'が設定されていますか? –

+0

Hmm、いいえ、私はコンポーネントスキャンを完全に見逃していますが、xml Beanを明示的に定義しました。 AFAIKコンポーネントのスキャンには、@Apectpectに加えて '@ Component'が必要です。 – Simeon

+2

'listenableComponent' beanについてはどうですか? –

答えて

1

見つけました。

これまでAspectJキーワードのaspectでアスペクトを定義していました。このよう :

@Aspect 
public aspect ProfilingAdvice extends ListenableComponent { 
    // code 
} 

は、私は後でclassでそれを定義し、関係なく、どのような本がやったことは、それはこのようにjavacそれをコンパイルしていなかったので、.classファイルがで行方不明になった、.javaの代わりにファイル.ajを作ったということですランタイム。

.ajの名前を.javaに変更しても問題ありませんでした。