2009-09-07 28 views
5

Tôi đang gặp khó khăn khi AspectJ thực hiện thời gian tải dệt trên một lớp được chú thích bằng @configurable trong dự án chính của tôi. Không có trường nào được đặt và không có trình chỉnh sửa nào được chạm vào.Thời gian tải lò xo không phát hiện được chú thích với @configurable

Tôi không nghĩ rằng có vấn đề với chính cấu hình, vì tôi đã trích xuất cấu hình và thử nghiệm nó trên một dự án sandbox nhỏ hơn. Chỉ vì lợi ích của nó, tôi sẽ bao gồm nó trong câu hỏi này mặc dù.

Vì vậy, tôi đang tự hỏi:

  1. Có điều gì trong dự án lớn hơn mà có thể gây trở ngại cho mùa xuân/AspectJ từ việc phát hiện các lớp học đặc biệt này?
  2. Có cách nào để kiểm tra xem mùa xuân có còn nhận thức được lớp học trong câu hỏi không?

Và cuối cùng, bất kể mã tôi có thể trích xuất (xin tha obfuscation):

Từ cấu hình XML:

<context:annotation-config /> 
<context:spring-configured /> 
<context:component-scan base-package="se.isydev" /> 
<context:component-scan base-package="se.istools" /> 
<aop:aspectj-autoproxy /> 
<context:load-time-weaver aspectj-weaving="on" /> 
<context:property-placeholder location="classpath:settings.properties" /> 
(...) 
<bean class="com.company.ClassToBeWeaved" 
    scope="prototype">  
    <property name="injectedBean" ref="injectedBean" /> 
</bean> 

Và chính lớp:

@Configurable 
public class ClassToBeWeaved { 
    private InjectedBean injectedBean; 

    @Required 
    public void setInjectedBean() { ... } 
} 

Sửa :

Vâng, hóa ra là nó không hoạt động do phụ thuộc vòng tròn. Ôi trời ơi, tôi thích làm việc trên mã di sản. Tuy nhiên, câu hỏi ban đầu của tôi vẫn còn.

+0

môi trường gì bạn đang chạy một này? LTW chỉ hoạt động trên một số máy chủ ứng dụng nhất định. – skaffman

+0

Tôi chạy hộp cát của tôi ngay trong nhật thực và ứng dụng thích hợp đang trong WAR đang chạy trên JBoss – mikek

+0

Phiên bản JBoss nào bạn đang chạy và dòng lệnh khởi động java cho nó là gì? Nếu JBoss là 5.x hoặc cao hơn, bạn không cần một tác nhân cụ thể (và đó là sự khác biệt với sandbox của bạn, nơi bạn phải chỉ định tác nhân). –

Trả lời

0

Bạn có thể đã quên "weave". Thêm -javaagent:path/to/aspectjweaver.jar hoặc -javaagent:path/to/spring-agent.jar vào dòng comman của bạn.

Tôi cũng khuyên bạn nên @Autowire sự phụ thuộc của bạn thay vì tiêm một cách rõ ràng.

+0

Không, không phải vậy. -javaagent: (...)/spring-agent-2.5.6.jar "là trên dòng lệnh của tôi – mikek

0

Tôi tin rằng LTW yêu cầu META-INF/aop.xml trên đường dẫn lớp của bạn. Nó sẽ giống như thế:

<aspectj> 
    <!-- 
     Uncomment this is you need AOP logging <weaver options="-verbose 
     -showWeaveInfo 
     -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"> 
    --> 
    <weaver> 
     <include within="com.xxx.MyClass" /> 
    </weaver> 
    <aspects> 
     <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/> 
     <include within="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/> 
    </aspects> 
</aspectj> 
+0

Ah không, không yêu cầu nó Như tôi đã nói, nó hoạt động dandy trong sandbox của tôi. – mikek

0

Bạn có nhiều sau đó tập tin XML 1 mùa xuân? Tôi tin rằng tôi đã gặp sự cố < aop: aspectj-autoproxy /> không nằm trong 'tệp cha mẹ' nhất của các tệp XML của tôi.

+0

Xem chỉnh sửa của tôi Lỗi là do sự phụ thuộc vòng tròn trong mã (không phải của tôi). – mikek

0

Một số gợi ý cho câu hỏi của bạn.

Để làm cho công việc dệt thời gian tải với mùa xuân, không chỉ bạn cần phải cấu hình đúng aop.xml nhưng bạn cũng cần phải có mùa xuân-instrument.jar & mùa xuân-aspects.jar.

Các tệp jar này chứa aop riêng của chúng.xml thực hiện kê khai các khía cạnh mùa xuân để xử lý:

  • @Transactional hỗ trợ
  • @Configurable hỗ trợ
  • JPA hỗ trợ ngoại lệ dịch
  • @Async chú thích để hỗ trợ lập kế hoạch

Điều gì xảy ra trong nền?

Khi sử dụng AspectJ tải thời gian dệt, các @Transactional@Configurable triển khai không còn dựa trên JDK proxy hoặc cglib proxy nhưng thực AspectJ khía cạnh.

Để bật các khía cạnh thực này, bạn cần thêm tệp jar. Jar cũng chứa tuyên bố những khía cạnh trong aop.xml riêng của họ

Thông tin chi tiết về cách tích hợp mùa xuân với AspectJ here

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