2014-02-08 2 views
2

Я экспериментировал @DeclareMixin функцию AspectJ, но я получаю эту ошибку:Не удается скомпилировать аспект AspectJ с @DeclareMixin

/media/thomas/data-disk/sandbox/java/aspectj-tests/src/main/java/org/myproject/aspects/MyAspect.java:7:0::0 Method 'org.myproject.aspects.MyInterface org.myproject.aspects.MyAspect.declareStuff()': factory method does not return something that implements 'org.myproject.aspects.MyInterface'

Вот мой аспект:

package org.myproject.aspects; 

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.DeclareMixin; 

@Aspect 
public class MyAspect 
{ 
    @DeclareMixin(value = "@org.myproject.aspects.Marker *", 
      interfaces = MyInterface.class) 
    public MyInterface declareStuff() 
    { 
     return new MyImplementation(); 
    } 
} 

Вот аннотация:

package org.myproject.aspects; 

public @interface Marker 
{ 
} 

Вот интерфейс:

package org.myproject.aspects; 

public interface MyInterface 
{ 
    public void doSomething(); 
} 

Вот реализация:

package org.myproject.aspects; 

public class MyImplementation implements MyInterface 
{ 
    @Override 
    public void doSomething() 
    { 
     System.out.println("Hello, world!"); 
    } 
} 

Вот ПОМ:

<?xml version="1.0" encoding="UTF-8"?> 
<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>aspectj-tests</groupId> 
    <artifactId>aspectj-tests</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <aspectj-version>1.7.4</aspectj-version> 
    </properties> 

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

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.6</version> 
       <configuration> 
        <complianceLevel>1.7</complianceLevel> 
        <showWeaveInfo>true</showWeaveInfo> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>test-compile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

ответ

0

я узнал, что это работает, если я удалить interfaces элемент из @DeclareMixin аннотацию.

Смежные вопросы