我試圖從加載時間編織到編譯時間編織與我的Spring 2.5應用程序。從加載時間編織器到編譯時間編織器在春天的問題
要做到這一點,我做了以下內容:
在我的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沒有被注入是因爲某種原因。
問題。
- 什麼可能導致這種情況?
- 是否真的需要
<context:spring-configured/>
? <context:component-scan base-package="com.domain.somepackage"/>
引用的包不包含Dao類。當我在其中添加另一個組件掃描標籤時,沒有什麼不同。這是必要的嗎?
你好,謝謝你的回答。通過計劃任務,你的意思是觸發器連接到org.springframework.scheduling.quartz.SchedulerFactoryBean的實例嗎?我確實有一些,但是我禁用了它們,重新編譯了,並且在加載上下文時遇到了同樣的問題。 – Ceniza