編集7:
問題は、 を操作する方法にあるようです@Configurable
。HttpSessionListener
回避策が提案されていますが、WebApplicationContext
直接操作するのは避けたいと思います。
@Configurable(autowire = Autowire.BY_TYPE, preConstruction = true)
public class SessionListener implements HttpSessionListener {
private static final Logger log;
@Autowired
private A a;
@Override
public void sessionCreated(HttpSessionEvent se) {
a.doSomething(); // <- Throws NPE
log.info("New session was created");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
log.info("A session was closed");
}
}
編集6:
サンプル プロジェクトをよりシンプルにしました。CLI から実行できるようになりました。
- プロジェクトのダウンロードと抽出: http://www.2shared.com/file/KpS5xeqf/dynatable.html
- mvn cleanspectj:compile を実行します
- 実行 mvn gwt:run
- CLI で「Why is consumer NULL here?」と表示されるはずです。印刷されます。
- 代わりに期待されるのは: cunsumer は NULL ではありません!
終わりが近い :D
編集 5: GWT のサンプル プロジェクト: GWT 開発モードでこれを実行してください
http://www.2shared.com/file/eai0PV-5/dynatable.html
sessionCreated() で NPE を取得します。
実行するための要件はmaven + gwt 2.5です
編集4:
サンプル プロジェクトはあまり代表的なものではないようでした。問題を再定式化する必要があります。
Eclipse では、プロジェクトを Web アプリケーションとして実行するときに GWT 開発モードを使用します。これは何らかの方法で、aspectj コンパイラを呼び出しません。少なくともそれが私が考えることができる唯一の理由です。
質問: Web アプリケーション (GWT 開発モード) として動作するように Compile Time Weaving をセットアップするには?
編集3:
問題を示すEclipse 4.2.1、M2e 1.4.0、STS 3.1.0、AJDT 2.2.2で小さなサンプルプロジェクトを作成しました:http://www.2shared.com/file/WZ1T9l9-/autowired.html
編集2:
他の同様のトピックで示唆されているように、Roo
バージョンの競合を避けるために、標準生成プロジェクトのプラグインを使用しました。まだ成功していません。(上記の org.codehaus.mojo を更新)
編集1:
これが正常かどうかはわかりませんが、Web アプリケーションを起動すると、Spring が行っていることの長いログが表示されますが、ウィービングや Aspectj に関連するものについては何も言及されていません...
問題は、コンソールでフィードバックが得られないため、pom.xml のこのプラグインがコンパイルされていないことに関連していると思います(他の多くの同様のプラグインを試しましたが、どれも機能しませんでした)応用:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.2</version>
<!-- NB: do not use 1.3 or 1.3.x due to MASPECTJ-90 and do not use 1.4
due to declare parents issue -->
<dependencies>
<!-- NB: You must use Maven 2.0.9 or above or these are ignored (see
MNG-2972) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.7.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
元の投稿:
私はstackoverflowや他の多くのリソースを検索してきましたが、それらの標準的な解決策のどれも、アクセス時に@autowired
フィールドが降伏する理由を見つけるのに役立ちません.Null Pointer Exception (NPE)
@Configurable(autowire = Autowire.BY_TYPE, preConstruction = true)
public class SessionListener implements HttpSessionListener {
private static final Logger log;
@Autowired
private A a;
@Override
public void sessionCreated(HttpSessionEvent se) {
a.doSomething(); // <- Throws NPE
log.info("New session was created");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
log.info("A session was closed");
}
}
A クラスは次のように宣言されます。
@Service
public class B implements A {
// some implementation
}
私のアプリケーションコンテキストには関連する部分があります:
<context:spring-configured />
<context:annotation-config />
<context:component-scan base-package='some.package' />
必要なライブラリはすべてそこにあります。私はSpring 3.0.2を使用しています。私の環境のせいで、コンパイル時ウィービングしか使えません。また、Google プラグインを使用して GWT 開発モードを開始しています。ADJT
、Spring Tool Suite
、m2Eclipse
およびを使用していGoogle Plugin
ます。m2e v1.0 用の AJDT コンフィギュレーターもインストールしました。