2013-07-26 26 views
6

Tôi muốn định cấu hình thời gian biên dịch cho các lớp được đánh dấu bằng chú thích @Configurable để có thể chèn phụ thuộc mùa xuân vào các lớp được instatiated với toán tử new. Tôi không muốn sử dụng thời gian tải vì tôi không có quyền truy cập để chạy tập lệnh của máy chủ ứng dụng, vì vậy tôi không thể sửa đổi nó. Ngoài ra tôi muốn để có thể sử dụng các lớp học này trong các bài kiểm tra, tôi có nghĩa là để chạy các trường hợp thử nghiệm từ IDE. Tôi tìm thấy thông tin chỉ về thời gian tải dệt trên web và tài liệu tham khảo mùa xuân và không có gì về cấu hình của thời gian biên dịch dệt.Thời gian biên dịch dệt cho DI trong các lớp không được quản lý mùa xuân

PS. Tôi sử dụng mùa xuân với maven

+0

Eclipse hoặc IntelliJ hoặc khác? –

+0

Tôi sử dụng eclipse IDE – maks

Trả lời

1

Something như thế này trong pom của bạn nên làm việc ...

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

Sau đó, chắc chắn rằng bạn có lò xo khía cạnh trên con đường lớp học của bạn.

Và đối với aspecting trong Eclipse - cài đặt AJDT

+0

Tôi có các khía cạnh về mùa xuân trên classpath, nhưng khi tôi cố gắng biên dịch (biên dịch mvn) dự án tôi nhận được lỗi tổ: 'không thể xác định chú thích của thiếu kiểu javax.persistence.Entity'. Tuy nhiên, tôi thậm chí không sử dụng nó trong dự án của mình (tôi không có công cụ tương thích với công cụ tương thích lẫn công cụ jpa khác) – maks

+0

Ngoài ra tôi đã nhận thấy rằng nó cố gắng dệt tất cả các lớp của tôi (ngay cả khi chúng không được đánh dấu là '@Configurable ') – maks

+0

Ngoài ra, '$ {aspectj.version}' là gì. Phiên bản của những gì nó ngụ ý? – maks

4

Vì vậy, câu trả lời khác cũng có giá trị nhưng tôi nghĩ rằng tôi muốn bao gồm trong một chi tiết nhỏ hơn một số trong những ý nghĩa của phương pháp này.

Quá trình cài đặt Tôi sử dụng là ở mức độ cơ bản này: -

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

Bây giờ, thêm một số thông tin về sự phụ thuộc: -

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

Tôi giả sử rằng bạn bỏ lỡ api kiên trì, mà được sử dụng để dệt.

Chỉnh sửa: liên quan đến https://jira.springsource.org/browse/SPR-6819 lỗi vào mùa xuân. Điều đó có vẻ là lý do tại sao bạn cần API kiên trì.

Cũng hữu ích có thể là để tạo ra một công việc maven để dệt nếu lớp học có được unweaved trong ide (điều này xảy ra rất nhiều cho tôi).

aspectj:compile 

Cuối cùng nếu bạn dự định kiểm tra lớp học của mình, có thể hữu ích khi dệt lớp sau giai đoạn này. Chúng tôi dệt trong giai đoạn prepare-package. Nếu bạn muốn thực hiện việc này, hãy thêm

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

vào plugin của bạn.

Tôi hy vọng điều đó sẽ hữu ích vì có thể khó để có được cách tiếp cận này để chơi tốt đẹp trong IDE.

+0

tại sao tôi cần api kiên trì? Tôi không sử dụng nó. Và tôi không thể tưởng tượng làm thế nào nó có thể được sử dụng để dệt. Tôi có một giả định rằng một số khía cạnh trong các khía cạnh mùa xuân làm việc với api này, do đó, plug-maven-plug phải có một tùy chọn để lựa chọn các khía cạnh cụ thể từ các thư viện aspectjLibraries được sử dụng trong quá trình dệt. Ngoài ra, tại sao tôi cần sự phụ thuộc của aspectjrt, tôi không sử dụng thời gian tải dệt – maks

+1

Xin chào, tôi đã thêm vấn đề jira cho điều kiên trì. – MikePatel

+0

Đồng thời thời gian chạy theo khía cạnh không được kết hợp để biên dịch thời gian dệt. Bạn có thể giảm thiểu nhu cầu sử dụng của nó bằng cách tránh các trình thiết kế đường cắt cflow và các hoạt động nàyJoinPoint (tôi đã đọc). Bạn đang ở trong một tình huống mà bạn không thể giới thiệu thêm bất kỳ sự phụ thuộc nào vào dự án của bạn hay gì đó? – MikePatel

Các vấn đề liên quan