2009-09-07 4 views
5

Mam problem z pobieraniem AspectJ do tasowania czasu ładowania w klasie z adnotacją @configurable w moim głównym projekcie. Żadne pola nie zostaną ustawione i żaden z ustawników nie zostanie dotknięty.Tracenie czasu wczytywania w winie nie wykrywa klasy z adnotacją @configurable

Nie sądzę, że problem dotyczy samej konfiguracji, ponieważ wyodrębniłem konfigurację i przetestowałem ją na mniejszym projekcie piaskownicy. Tylko ze względu na to, uwzględnię to w tym pytaniu.

Więc zastanawiam:

  1. Czy jest coś w większego projektu, które mogą być utrudniania wiosna/AspectJ od wykrywanie tej konkretnej klasy?
  2. Czy istnieje sposób sprawdzenia, czy wiosna jest świadoma klasy w pytaniach?

I wreszcie, bez względu na kod można wyodrębnić (proszę wybaczyć zaciemniania):

Od XML konfiguracji:

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

a klasa sama:

@Configurable 
public class ClassToBeWeaved { 
    private InjectedBean injectedBean; 

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

Edycja :

Okazało się, że nie działa z powodu zależności cyklicznej. Och, kochanie, uwielbiam pracować nad starszym kodem. Mimo to moje pierwotne pytania pozostają.

+0

Co środowisko są uruchomione ten jeden? LTW działa tylko na niektórych serwerach aplikacji. – skaffman

+0

Uruchomiłem moją piaskownicę w czasie zaćmienia, a właściwa aplikacja jest w WAR działającej na JBoss – mikek

+0

Jakiej wersji JBoss pracujesz i jaka jest linia poleceń uruchamiania java dla niego? Jeśli JBoss ma wartość 5x lub wyższą, nie potrzebujesz konkretnego agenta (i to jest różnica z piaskownicą, w której musisz określić agenta). –

Odpowiedz

0

Prawdopodobnie zapomniałeś "weave". Dodaj -javaagent:path/to/aspectjweaver.jar lub -javaagent:path/to/spring-agent.jar do linii koman.

Proponuję również, abyś raczej polegał na zależności niż wyraźnie ją wstrzykiwał.

+0

Nie, nie to. -javaagent: (...)/spring-agent-2.5.6.jar "jest w mojej linii poleceń – mikek

0

Wierzę, że LTW wymaga META-INF/aop.xml na ścieżce klas. Powinno to wyglądać tak:

<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

Nie, nie wymaga tego, jak powiedziałem, działa dandy w mojej piaskownicy – mikek

0

Czy masz więcej niż 1 wiosennej pliku XML? Wierzę, że miałem problem < aop: aspectj-autoproxy /> nie należał do "najbardziej macierzystych" moich plików XML.

+0

Zobacz moją edycję Błąd wynikał z okrężnej zależności w kodzie (nie mojej). – mikek

0

Kilka wskazówek na twoje pytanie.

Aby uczynić pracę tkacką czasu ładowania z wiosny, nie tylko trzeba odpowiednio skonfigurować aop.xml ale trzeba również mieć wiosna-instrument.jar & wiosna-aspects.jar.

Pliki jar zawierają własne pliki .xml które deklarują aspekty wiosny do obsługi:

  • @Transactional wsparcie
  • @Configurable wsparcie
  • JPA wsparcie tłumaczenie Wyjątek
  • @Async adnotacja o wsparcie planowania

Co dzieje się w tle?

Podczas korzystania AspectJ obciążenia czasu tkania, że ​​@Transactional i @Configurable implementacje nie są już oparte na JDK proxy lub CGLIB proxy ale prawdziwe AspectJ aspektów.

Aby włączyć te rzeczywiste aspekty, potrzebne są dodatkowe pliki jar. Słoik zawierać również oświadczenie o tych aspektów własnej aop.xml

Więcej szczegółów, w jaki sposób zintegrować wiosnę z AspectJ here

Powiązane problemy