質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.99%

  • Java

    12186questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1482questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Spring Boot

    381questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • DI (Dependence Injection)

    15questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

EclipseからはDIできるのにwarにすると出来ない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 231

simishu

score 2

Spring Bootを使用して開発をしているのですが、Eclipseから以下ソースを実行すると、@Autowiredのインスタンスを使用できるのですが、Mavenビルドして、warを作成すると、@AutowiredのインスタンスがNullになります。

以下ソース1のgrantlogic.getUserInfo(user)の箇所になります。
事前に中身を確認しても、確かにnullになっています。
ソース1の対象行までは確かに動いています。

【対象ソース(不要と思われるところは削除)】
=====ソース1
@Aspect
@Component
public class ActionLogInterceptor {
@Autowired
private grantServiceLogic grantlogic;

/**

  • Beforeアノテーションの処理
  • Actionパッケージ内の処理開始前に実行
    */
    @Before("execution(* jp.co.xxxx.actions..*.*(..)) && !within(ActionLogInterceptor)")
    public void invokeBefore(JoinPoint joinPoint) {
    ※この位置でエラーが発生する
    User Entity userEntity = grantlogic.getUserInfo(user);
             
    }
    }

=====ソース2
@Service
public class grantServiceLogic {
@Autowired
private grantServiceDBControl dbControl;
/**

  • ログインユーザ情報取得
  • @param loginId
  • @return
    */
    public UserEntity getUserInfo(String loginId) {
    return dbControl.getUserInfo(loginId);
    }
    }

インターネットで見て、ApplicationContext.xmlを作成し、
以下を記載しましたが、「aop:aspectj-autoproxy」の箇所がエラーになります。

<aop:aspectj-autoproxy proxy-target-class="true" />

またCompnentScanやEnableAspectJAutoProxyも記載しましたがNoSuchMethodエラーが表示されます。

気になっているのはビルド時に以下warningが表示されています。

bad version number found in C:\Users\XXXXXX\.m2\repository\org\aspectj\aspectjrt\1.8.9\aspectjrt-1.8.9.jar expected 1.8.7 found 1.8.9

【追加】
・エラーはNullpointerExceptionのみです。過去の質問にあったような他のExceptionはありません。
・@Serviceを@Componentにしても変わりません。
・aspectjtoolsはEclipse上で動かすときは1.8.9のみですが、Mavenビルドすると1.8.7も増えます。ただwarファイルの中には1.8.9のみです。
・ビルド時に以下Warningが出ています。
No sources found skipping aspectJ compile
・使用している各バージョンは以下になります。
java 1.8
tomcat 8.0.47
spring boot 1.4.4.(スタータのバージョン)
・classファイルをでコンパイルした結果、Nullになる場合はaspectOfメソッドや hasAspectメソッドがありました。
Nullにならない場合はこのようなメソッドはありませんでした。

ご存知の方、いましたら回答頂きたく思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • kuniku

    2017/10/24 10:08 編集

    回答ではありませんが、まだ確認されていないのであれば以下を参考に。 - Spring boot のドキュメント -- 85.1 Create a deployable war file https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file you update your application’s main class to extend SpringBootServletInitializer -- 66.2 Packaging executable jar and war files https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging To build a war file that is both executable and deployable into an external container you need to mark the embedded container dependencies as “provided”, e.g: - Qiita Spring Boot 使い方メモ >> war で出力する https://qiita.com/opengl-8080/items/05d9490d6f0544e2351a#war-%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B

    キャンセル

  • simishu

    2017/10/24 10:55

    確認させて頂きます。ありがとうございます。

    キャンセル

  • simishu

    2017/10/24 13:10

    確認しましたが、warファイルのデプロイ、実行は出来ます。@aspectアノテーションをつけたクラスの中で@autowiredをつけたインスタンスがデプロイ環境だとnullになってしまいます。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12186questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1482questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Spring Boot

    381questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • DI (Dependence Injection)

    15questions

    DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。