2016-08-09 12 views
0

Ich versuche, Spring AOP zu verwenden, aber ich habe Probleme. Hier ist sie:Frühling wirft ClassNotFound für benutzerdefinierte Aspect

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 

Hier ist die Profilierung Beratung:

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 
    } 
} 

I XML-Konfigurations bin mit, hier sind die relevanten Teile (hoffe ich):

<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> 

und das 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> 

Sorry wegen der langen Post, aber ich lese und lese mehrere Guides neu und bin momentan etwas ratlos. Danke.

+1

Ist Ihr 'Context Component Scan' für dieses' org.codarama.diet.event.aop' Paket konfiguriert? –

+0

Hmm, nein Ich vermisse Component-Scan komplett, aber ich habe explizit xml Beans definiert. AFAIK Components Scan erfordert '@ Component' zusätzlich zu' @ Aspect'. – Simeon

+2

Was ist mit 'hörbareComponent' Bean? –

Antwort

1

Es gefunden.

Es stellte sich heraus, dass ich zuvor den Aspekt mit demAspectJ Schlüsselwort definiert hatte. So:

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

I definiert es mit class später, aber egal, was diese getan hat, ist, dass es die Datei .aj statt .java, so javac gemacht wurde es nicht kompilieren und so die .class Datei auf fehlte Laufzeit.

Alles, was ich tun musste, war die .aj in .java umzubenennen und alles war in Ordnung.

Verwandte Themen