Frage

Aktualisieren 5: habe ich den neuesten Frühling ToolsSuite IDE heruntergeladen basierte auf der neuesten Eclipse-. Wenn ich mein Projekt als ein Maven-Projekt importieren, Eclipse / STS erscheint für den Aufbau von meinem Projekt der Maven Ziele zu verwenden. Das bedeutet, AspectJ schließlich richtig funktioniert in Eclipse.

Aktualisieren. 4: nur am Ende mit Maven + AspectJ-Plugin für Kompilierung-Weben Ich habe, effektiv Eclipse Mechanismus unter Umgehung

Update 3: Es scheint Eclipse AspectJ Plug-in Pausen Eclipse Fähigkeit, richtig zu Tomcat zu veröffentlichen. Nur durch die AspectJ Fähigkeit an einem Projekt zu entfernen kann ich es wieder richtig zu veröffentlichen. Sehr ärgerlich.

Update 2: Ich habe das jetzt in Eclipse arbeiten. Es macht mich sehr unangenehm, dies zu sagen, aber ich habe keine Ahnung, wie ich es von der Arbeit entweder Eclipse oder Maven baut. Es scheint eine Kompilierung Problem zu sein, anstatt eine Laufzeit Ausgabe.

Update 1: Es scheint, ich das bekommen habe über Maven Builds zu arbeiten, aber ich habe keine Ahnung, wie. Eclipse funktioniert immer noch nicht. Das einzige, was ich geändert in der pom.xml war das Hinzufügen dieser Konfigurationsparameter (unbedeutend?):

<source>1.6</source>
<complianceLevel>1.6</complianceLevel>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>

Ich bin eigentlich besorgt, dass ich eine Wiederholung von haben dieses Problem , wo alles inkonsistent funktioniert. Ich werde diese Frage halten aktualisiert, wie ich erfahren Sie mehr.

Im Hinblick auf die Eclipse Ich habe einige Fortschritte durch die binären Aspekte unter ich weben wollen - in diesem Fall feder aspects.jar - und es aus meinem Classpath zu kopieren. Ich füge dann diese jetzt externe jar meines Seitenpfad . Nachdem Sie das getan, richtig Eklipse zeigt mir AspectJ Marker in meinem Code. Es ist ärgerlich, dass ich kann nicht einfach verlassen feder aspects.jar in meiner Java Build Path , die von Maven für mich über die Maven Plug-in erhalten bleibt. Aus irgendeinem Grund die AspectJ jedoch Plug-in nicht sehen die binären Aspekte, wenn sie nicht explizit hinzugefügt sind in den Seitenpfad .


Original Beitrag: @Configurable ist eine Frühlings-Anmerkung, die Abhängigkeiten zu injizierenden in Objekte instanziiert außerhalb Frühling ermöglicht (zum Beispiel durch Hibernate oder eine Factory-Klasse)

.

Ich wurde mit dieser Anmerkung zuvor mit der Ladezeit Weben und es meist gearbeitet. Gelegentlich würde ich booten und nichts injiziert bekommen würde. Dieses Problem gelaicht diese Frage Stackoverflow . Es gab nicht viele Antworten, aber die meisten vorgeschlagen, dass ich versuche zu kompilieren Zeit statt durch höhere Zuverlässigkeit weben.

Ich installierte die AspectJ-Plug-in für Eclipse und Maven. Beide produzieren, was richtig kompilierten Klassen zu sein scheint. Ich habe eine der Klassen in einem Texteditor vor AspectJ Kompilierung geöffnet und fand keine Hinweise auf AspectJ. Ich öffnete es nach AspectJ Kompilierung und sowohl Eclipse und Maven erzeugte Versionen haben einen Verweis auf org.aspectj.weaver.MethodDeclarationLineNumber . Das ist, warum ich es annehmen richtig kompiliert werden. Das Problem ist, dass einmal im Einsatz, keine Abhängigkeiten injiziert bekommen.

Mein Frühling applicationContext.xml ist Folgendes enthalten:

    <context:spring-configured />

    <context:component-scan base-package="com.myapp" />

Ist die oben das ist alles für die Klassen benötigt markiert @Configurable DI getan haben? Bei der Umrechnung von der Ladezeit Weberei Weberei zu Zeit kompilieren, entfernte ich META-INF / aop.xml von meinem applicationContext.xml und Spring Tomcat Weber von meinem context.xml .

Wie kann ich dieses Problem weiter untersuchen? Was sind mögliche Ursachen?

War es hilfreich?

Lösung

Es funktioniert für uns auf Maven Zeit Weben mit kompilieren, versuchen Sie die folgenden Plugins hinzugefügt:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
    <compilerVersion>1.6</compilerVersion>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>
</plugin>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
    <execution>
        <id>compile</id>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <verbose>false</verbose>
            <outxml>true</outxml>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <goals>
            <goal>compile</goal>
        </goals>
    </execution>
    <execution>
        <id>test-compile</id>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <verbose>false</verbose>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <goals>
            <goal>test-compile</goal>
        </goals>
    </execution>
</executions>
<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.4</version>
    </dependency>
</dependencies>
</plugin>

Die als zwei getrennte Ausführungsschritte getan, damit Sie anderen Aspekt Bibliotheken für Unit-Tests und Zusammenstellung hinzuzufügen.

Sie werden auch benötigen folgende Abhängigkeit für die feder Aspekte Bibliothek hinzugefügt:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <scope>compile</scope>
    </dependency>

Andere Tipps

I erfolgreich Ladezeit Weben in meiner app konfiguriert, wenn dies eine Alternative für Sie.

Meine Umwelt:

  • JDK-1.6
  • Feder-2.5.6
  • JPA mit Eclipselink-1.1.0

Konfigurationsdetails:

Spring-XML-Konfiguration:

<context:annotation-config/>
<context:spring-configured/>
<context:load-time-weaver/>

<bean id="baseEntity" class="package.name.BaseEntity" scope="prototype">
  <property name="historyHandler" ref="historyHandler" />
</bean>

<bean id="historyHandler" class="package.name.HistoryJpaHandler" scope="prototype">
  <property name="historyDao" ref="historyDao" />
</bean>

<bean id="historyDao" class="package.name.HistoryJpaDao">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

Feder Anmerkungen

@Configurable("baseEntity")
public abstract class BaseEntity

@Configurable("historyHandler")
public class HistoryJpaHandler extends SessionEventAdapter implements HistoryHandler 

Java VM Parameter

<JAVA_HOME>/bin/java -javaagent:/full/path/to/spring-agent-2.5.6.jar

Instanzen von historyHandler und baseEntitty werden von ecliselink erstellt. historyHandler in baseEntitty und historyDao in historyHandler wird durch Last timeweaving eingestellt.

Sie können die VM Parameter in Eclipse Lauf Konfiguration oder in Tomcats catalina.sh/bat gesetzt.

Herstellung eines Feldes einer @configurable Klasse Autowired Nullpointer wirft, wenn Sie richtig für diese Anmerkung nicht Ihre Feder konfigurieren. Gehen Sie folgendermaßen vor, um @configurable Anmerkungen richtig funktionieren

zu machen

Diese Methode wird aufgerufen AspectJ bauen Zeit Weben Frühling Bohnen auf Ihre nicht-feder gemacht Klassen zu injizieren .

Der erste Schritt ist es, diese Plugins in Eclipse zu installieren:

Von diesen beiden Update-Sites installieren, was Eclipse schlägt vor:

http://download.eclipse.org/tools/ajdt/43/update
http://dist.springsource.org/release/AJDT/configurator/ 

Nach der Installation auf Projekt der rechte Maustaste und Sie:

Configure > Convert to Aspectj
Maven > Update

Als nächstes müssen Sie diese zu Ihrem pom.xml hinzuzufügen:

Unter Abhängigkeiten hinzufügen:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.0.2.RELEASE</version>
</dependency>

Unter Plugins hinzufügen:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.5</version>
            <configuration>
                <showWeaveInfo>true</showWeaveInfo>
                <source>1.7</source>
                <target>1.7</target>
                <Xlint>ignore</Xlint>
                <complianceLevel>1.7</complianceLevel>
                <encoding>UTF-8</encoding>
                <verbose>false</verbose>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>1.7.0</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>1.7.0</version>
                </dependency>
            </dependencies>
        </plugin>

Wichtig: Verwenden Sie KEINE <pluginManagment> Tag unter <build> Tag. Ihre pom.xml braucht so etwas zu sein:

<project ....>
    ....
    <dependencies>
        <dependency> 
                    ....
        </dependency>
                ....
    </dependencies>
    <build>
        <plugins>
            <plugin>
                            ....
            </plugin>
                        ....
        </plugins>
    </build>
</project>

schließlich <context:spring-configured /> zu Ihrer Feder Anwendungskontext Konfigurationsdatei hinzufügen.

Jetzt können Sie eine POJO-Klasse als @Configurable mit Anmerkungen versehen und Feder Bohnen darin mit @Autowired Anmerkung injizieren. Auf diese Weise, wenn Sie eine neue Instanz dieser POJO machen es (zum Beispiel injiziert mit Abhängigkeiten) automatisch konfiguriert werden.

Was Ihre Eclipse-Classpath Probleme betroffen sind, könnten Sie dies nützlich finden.

Die m2eclipse Plugin eine optionale AJDT Integration . Die Integration liest den aspectLibraries Abschnitt der aspectj-Maven-Plugin Konfiguration und trägt die Gläser Aspect Pfad Eclipse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top