1

我試圖從加載時間編織到編譯時間編織與我的Spring 2.5應用程序。從加載時間編織器到編譯時間編織器在春天的問題

要做到這一點,我做了以下內容:

  1. 在我的Ant構建文件,我添加

    <path id="aspectPath"> 
        <pathelement location="${lib.home}/spring-aspects.jar"/> 
    </path> 
    
    <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"> 
        <classpath> 
         <pathelement location="${aspectj.home}/aspectjtools.jar"/> 
        </classpath> 
    </taskdef> 
    

,取而代之的是以下

的參考javac編譯
<iajc sourceroots="${src.home}" 
     destdir="${build.home}/WEB-INF/classes" 
     classpathRef="compile.classpath" 
     aspectPathRef="compile.classpath" 
     debug="${compile.debug}" 
     deprecation="${compile.deprecation}" 
     encoding="cp1252" 
     source="1.6" 
     target="1.6" 
     showWeaveInfo="${compile.debug}"/> 

在applicationCont ext.xml我再換成

<context:load-time-weaver/> 

在我的應用程序上下文文件

<context:spring-configured/> 

其他配置設置,BTW,包括

<tx:annotation-driven/> 
<context:component-scan base-package="com.domain.somepackage"/> 
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

在context.xml文件,我刪除了從裝載機標籤開始追蹤

loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" 

當我運行構建腳本時,它編譯沒有錯誤。

但是我得到這個警告。

[iajc] warning at <Unknown>::0 Found @DeclareAnnotation while current release 
does not support it (see 'org.aspectj.weaver.bcel.AtAjAttributes') 

在頂部,此警告在底部:

[iajc] warning at C:\server- 
lib\aspectjtools.jar!org\aspectj\ajdt\internal\compiler\ 
CompilerAdapter.class:121::0 advice defined in  
org.aspectj.ajdt.internal.compiler.CompilerAdapter has not been 
applied [Xlint:adviceDidNotMatch] 

大部分記錄的樣子:

[iajc] weaveinfo Join point 'method-execution(void com.kjconfigurator.upgra 
de.Upgrade1_07HelperImp.addServiceParticipation(com.kjconfigurator.core.domain.U 
ser, com.kjconfigurator.core.domain.ServiceAccount))' in Type 'com.kjconfigurato 
r.upgrade.Upgrade1_07HelperImp' (Upgrade1_07HelperImp.java:196) advised by after 
Returning advice from 'org.springframework.transaction.aspectj.AnnotationTransac 
tionAspect' (spring-aspects.jar!AbstractTransactionAspect.class:77(from Abstract 
TransactionAspect.aj)) 

我刪除從Tomcat的lib的tomcatspringweaver罐子。 我使用aspectj1.7

當我啓動應用程序時,我得到的指示是,當一個DAO類被注入到服務類有一個NPE處org.springframework.beans.AbstractPropertyAccessor.setPropertyValues錯誤(AbstractPropertyAccessor.java:104)

Caused by: org.springframework.beans.PropertyBatchUpdateException; nested 
PropertyAccessExceptions (1) are: PropertyAccessException 1: 
org.springframework.beans.MethodInvocationException: Property 'dao' threw exception; 
nested exception is java.lang.NullPointerException 

在DAO類延伸的AbstractJpaDao類,看起來像這樣:

public abstract class AbstractJpaDao<T> { 
    private static Logger log = Logger.getLogger(AbstractJpaDao.class.getName()); 

    private EntityManager entityManager; 

    @PersistenceContext 
    public void setEntityManager(EntityManager entityManager) { 
     this. entityManager = entityManager; 
    } 
    ... 
} 

它已經這麼長的時間,因爲這一切的初始設置後,我不不要忘記一切配置工作。我也不太瞭解班級裝載機或AspectJ。但是有些事情沒有正確發生,也許Entitymanager沒有被注入是因爲某種原因。

問題。

  1. 什麼可能導致這種情況?
  2. 是否真的需要<context:spring-configured/>
  3. <context:component-scan base-package="com.domain.somepackage"/>引用的包不包含Dao類。當我在其中添加另一個組件掃描標籤時,沒有什麼不同。這是必要的嗎?

回答

0

我終於在春季顧問的幫助下找到了解決這個問題的辦法。

在完全初始化之前有一個方面被調用,導致NPE在這方面。 (Eclipse錯誤地顯示了NPE源於被建議的類。)我通過刪除註釋來禁用該方面,因爲該方面並不重要;然而,更好的解決辦法是讓我指示Spring先於其他人初始化該類,或者使用更窄的點刪除表達式,並排除了setter方法。

0

是否有任何計劃任務定義在某處 - 這聽起來像計劃任務在Spring上下文完全初始化之前觸發。

+0

你好,謝謝你的回答。通過計劃任務,你的意思是觸發器連接到org.springframework.scheduling.quartz.SchedulerFactoryBean的實例嗎?我確實有一些,但是我禁用了它們,重新編譯了,並且在加載上下文時遇到了同樣的問題。 – Ceniza