2013-07-26 12 views
6

Chcę skonfigurować czas kompilacji dla klas oznaczonych adnotacją @Configurable, aby móc wstrzykiwać zależności sprężynowe do klas inicjowanych za pomocą operatora new. Nie chcę używać tkania czasu ładowania, ponieważ nie mam dostępu do uruchamiania skryptu serwera aplikacji, więc nie mogę go zmodyfikować. Również chcę móc korzystać z tych klas w testach, mam na myśli uruchamianie przypadków testowych z IDE. Znalazłem informacje tylko o tkaniu czasu ładowania w Internecie i źródłowym odnośniku oraz o konfiguracji tkania w czasie kompilacji.Skompiluj czas tkania dla DI w klasach niezwiązanych ze sprężyną

PS. Używam sprężynę z Maven

+0

Eclipse lub IntelliJ lub inny? –

+0

Używam Eclipse IDE – maks

Odpowiedz

1

coś takiego w swojej pom powinny pracy ...

  <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.4</version> 
       <executions> 
        <execution> 
         <id>compile</id> 
         <configuration> 
          <source>${source}</source> 
          <target>${target}</target> 
          <verbose>true</verbose> 
          <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>${source}</source> 
          <target>${target}</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> 
        <!-- Ensure aspectj tools version used by compiler is the same version used as dependency. Avoids warning --> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjtools</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjweaver</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin> 

Następnie upewnij się, że wiosna-aspekty na ścieżce klasy.

I aspecting w Eclipse - zainstalować AJDT

+0

Mam aspekty wiosenne na ścieżce klas, ale kiedy próbuję skompilować (kompilacja mvn) projekt dostaję błąd gniazda: 'nie można określić adnotacji o brakującym typie javax.persistence.Entity'. Jednak nawet nie używam go w moim projekcie (nie mam ani hibernacji, ani innego kompatybilnego narzędzia jpa). – maks

+0

Zauważyłem też, że próbuje on splatać wszystkie moje klasy (nawet jeśli nie są one oznaczone jako @konfigurowalne ') – maks

+0

Co to jest '$ {aspectj.version}'. Wersja tego, co to oznacza? – maks

4

Więc druga odpowiedź jest również ważne, ale myślałem, że pokrycie w nieco bardziej szczegółowo niektóre z konsekwencji takiego podejścia.

Konfiguracja używam jest na poziomie podstawowym to: -

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.4</version> 
      <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> 
      <configuration> 
       <outxmlfile>META-INF/aop.xml</outxmlfile> 
       <aspectLibraries> 
        <aspectLibrary> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-aspects</artifactId> 
        </aspectLibrary> 
       </aspectLibraries> 
       <source>1.7</source> 
       <target>1.7</target> 
       <forceAjcCompile>true</forceAjcCompile> 
      </configuration> 
     </plugin> 

Teraz kilka dodatkowych informacji o zależnościach: -

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${dep.spring}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${dep.spring}</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>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 

Przypuszczam, że przegapisz API trwałości, która służy do tkania.

Edytowanie: związane z https://jira.springsource.org/browse/SPR-6819 błędów na wiosnę. Wydaje się, że potrzebujesz interfejsu API trwałości.

Pomocne może być również stworzenie sprytnego zadania, jeśli klasy rozplątają się w idei (to dużo dla mnie).

aspectj:compile 

Wreszcie, jeśli zamierzają jednostki przetestować swoje zajęcia, może być przydatna do tkania klas po tej fazie. Tkamy w fazie prepare-package. Jeśli chcesz to zrobić, dodaj:

 <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 

Do twojej wtyczki.

Mam nadzieję, że pomaga, ponieważ może być trudno uzyskać to podejście, aby grać dobrze w IDE.

+0

dlaczego potrzebuję api persistance? Nie używam tego. I nie mogę sobie wyobrazić, jak można go wykorzystać do tkania. Mam założenie, że jakiś aspekt w wiosennych aspektach działa z tym interfejsem, więc aspekt-maven-pluging musi mieć opcję wyboru konkretnych aspektów z aspectjLibraries, które będą używane w procesie tkania. Ponadto, dlaczego potrzebuję zależności aspectjrt, nie używam tkania czasu obciążenia – maks

+1

Witam, dodałem problem jira dla rzeczy uporczywości. – MikePatel

+0

Również środowisko wykonawcze aspektu nie jest połączone z tasowaniem czasu kompilacji. Możesz zminimalizować potrzebę jego użycia, unikając oznaczeń punktów cflow i operacji tegoininPoint (czytałem). Czy jesteś w sytuacji, w której nie możesz wprowadzić żadnych dodatkowych zależności do swojego projektu lub czegoś takiego? – MikePatel

Powiązane problemy