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

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

ただいまの
回答率

88.64%

spring boot 宣言していない変数が使えている??

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,151

sanezane

score 85

お世話になっております。spring bootを勉強しております。
ECサイトハンズオンにてECサイトを作成しながら勉強しているのですが、ソースコードに疑問が発生したため質問致します。

以下にソースの階層を示します。

$ tree
.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── jsug
    │   │       ├── App.java ... Spring Bootアプリケーションのエンドポイント
    │   │       ├── AppConfig.java ... 今回のアプリケーション用のBean定義ファイル
    │   │       ├── SecurityConfig.java ... 認証・認可(Spring Security)用のBean定義ファイル
    │   │       └── domain
    │   │           ├── model ... ドメインオブジェクトを格納するパッケージ
    │   │           │   ├── Account.java ... アカウントモデル
    │   │           │   ├── Cart.java ... カートモデル
    │   │           │   ├── Category.java ... カテゴリーモデル
    │   │           │   ├── Goods.java ... 商品モデル
    │   │           │   ├── Order.java ... 注文モデル
    │   │           │   ├── OrderLine.java ... 注文行(1行)モデル
    │   │           │   └── OrderLines.java ... 注文行(複数)モデル
    │   │           ├── repository ... レポジトリクラスを格納するパッケージ
    │   │           │   ├── SqlFinder.java ... SQLファイルから、SQL文を取得するためのヘルパー
    │   │           │   ├── account
    │   │           │   │   └── AccountRepository.java ... アカウントモデルのデータアクセス(CRUD)用クラス
    │   │           │   ├── category
    │   │           │   │   └── CategoryRepository.java ... カテゴリモデルのデータアクセス(CRUD)用クラス
    │   │           │   ├── goods
    │   │           │   │   └── GoodsRepository.java ... 商品モデルのデータアクセス(CRUD)用クラス
    │   │           │   └── order
    │   │           │       └── OrderRepository.java ... 注文モデルのデータアクセス(CRUD)用クラス
    │   │           ├── service ... サービスクラスを格納するパッケージ
    │   │           │   ├── account
    │   │           │   │   └── AccountService.java ... アカウントのサービスクラス
    │   │           │   ├── category
    │   │           │   │   └── CategoryService.java ... カテゴリのサービスクラス
    │   │           │   ├── goods
    │   │           │   │   ├── GoodsNotFoundException.java ... 商品が見つからない場合の例外クラス
    │   │           │   │   └── GoodsService.java ... 商品のサービスクラス
    │   │           │   ├── order
    │   │           │   │   ├── EmptyCartOrderException.java ... カートが空の場合の例外クラス
    │   │           │   │   ├── InvalidCartOrderException.java ... カートの状態が不正な場合の例外クラス
    │   │           │   │   └── OrderService.java ... 注文のサービスクラス
    │   │           │   └── userdetails
    │   │           │       ├── ShopUserDetails.java ... 認証ユーザークラス
    │   │           │       └── ShopUserDetailsService.java ... 認証ユーザー取得サービスクラス
    │   │           └── validation ... カスタムBeanValidationルールを格納するパッケージ
    │   │               ├── Confirm.java ... 2つのフィールドが同じ値であることの制約を示すアノテーション
    │   │               ├── ConfirmValidator.java ... 2つのフィールドが同じ値であることを検証するバリデータ
    │   │               ├── UnusedEmail.java ... E-mailが使用されていないことの制約を示すアノテーション
    │   │               └── UnusedEmailValidator.java ... E-mailが使用されていないことを検証するバリデータ
    │   └── resources
    │       ├── application.properties ... アプリケーションの設定ファイル
    │       ├── db ... FlywayによるDBマイグレーション用のSQLファイル
    │       │   └── migration
    │       │       ├── V1__create-schema.sql
    │       │       └── V2__initial-data.sql
    │       ├── log4jdbc.log4j2.properties ... Log4JDBCの設定ファイル
    │       ├── sql ... リポジトリ用のSQLファイル
    │       │   ├── account
    │       │   │   ├── countByEmail.sql
    │       │   │   ├── create.sql
    │       │   │   └── findOne.sql
    │       │   ├── category
    │       │   │   └── findAll.sql
    │       │   ├── goods
    │       │   │   ├── countByCategoryId.sql
    │       │   │   ├── findByCategoryId.sql
    │       │   │   └── findOne.sql
    │       │   ├── order
    │       │   │   └── create.sql
    │       │   └── orderLine
    │       │       └── create.sql
    │       ├── static ... 静的ファイル
    │       │   ├── css
    │       │   │   └── wro.css
    │       │   ├── fonts
    │       │   │   ├── montserrat-webfont.eot
    │       │   │   ├── montserrat-webfont.svg
    │       │   │   ├── montserrat-webfont.ttf
    │       │   │   ├── montserrat-webfont.woff
    │       │   │   ├── varela_round-webfont.eot
    │       │   │   ├── varela_round-webfont.svg
    │       │   │   ├── varela_round-webfont.ttf
    │       │   │   └── varela_round-webfont.woff
    │       │   └── images
    │       │       ├── 404-icon.png
    │       │       ├── homepage-bg.jpg
    │       │       ├── platform-bg.png
    │       │       ├── platform-spring-xd.png
    │       │       ├── spring-logo-xd-mobile.png
    │       │       └── spring-logo-xd.png
    │       └── templates ... Thyemeleafのテンプレート
    │           ├── account
    │           │   ├── createFinish.html ... アカウント作成完了画面
    │           │   └── createForm.html ... アカウント作成フォーム画面
    │           ├── cart
    │           │   └── viewCart.html ... カート確認画面
    │           ├── goods
    │           │   ├── notFound.html ... 商品が見つからない場合のエラー画面
    │           │   └── showGoods.html ... 商品一覧画面
    │           ├── login
    │           │   └── loginForm.html ... ログインフォーム画面
    │           └── order
    │               ├── confirm.html ... 注文確認画面
    │               ├── error.html ... 注文エラー画面
    │               └── finish.html ... 注文確認画面
    └── test
        ├── java
        │   └── jsug
        │       └── domain
        │           ├── TestConfig.java ... ユニットテスト用のBean定義ファイル
        │           ├── model ... ドメインオブジェクトのJUnitコードを格納するパッケージ
        │           │   └── CartTest.java
        │           ├── repository ... レポジトリクラスのJUnitコードを格納するパッケージ
        │           │   ├── account
        │           │   │   └── AccountRepositoryTest.java
        │           │   ├── category
        │           │   │   └── CategoryRepositoryTest.java
        │           │   ├── goods
        │           │   │   └── GoodsRepositoryTest.java
        │           │   └── order
        │           │       └── OrderRepositoryTest.java
        │           └── service ... サービスクラスのJUnitコードを格納するパッケージ
        │               ├── account
        │               │   └── AccountServiceTest.java
        │               ├── goods
        │               │   └── GoodsServiceTest.java
        │               ├── order
        │               │   └── OrderServiceTest.java
        │               └── userdetails
        │                   └── ShopUserDetailsServiceTest.java
        └── resources
            ├── logback.xml ... ユニットテスト用Logback設定ファイル
            └── sql ... テストデータ作成用のSQLファイル
                ├── drop-tables.sql
                ├── insert-accounts.sql
                ├── insert-category.sql
                ├── insert-goods.sql
                └── insert-orders.sql

SqlFinder.javaにて「log」という変数(インスタンス?)を使用しているのですが、SqlFinder.java内には「log」の変数宣言はないのです。こちらもアノテーションにてインスタンスの生成の記述が不要とか、そういう仕組みがあるのでしょうか?
logの宣言箇所を調べようと思ったのですがエディターとして使用しているeclipse自体もあまり慣れていないためまだ宣言箇所を特定できておりません。。。

package demo.domain.repository;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.util.StreamUtils;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

@Component
@Slf4j
public class SqlFinder {

    @Cacheable("sql")
    public String get(String path) {
        Resource resource = new ClassPathResource(path);
        log.info("load {}", resource);                     //ここで使えているのはなぜ??
        try (InputStream stream = resource.getInputStream()) {
            return StreamUtils.copyToString(stream, StandardCharsets.UTF_8);
        } catch (IOException e) {
            throw new IllegalArgumentException(path + " is not found!", e);
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • swordone

    2018/11/26 01:39

    Windowsなら確かctrl押しながらクリックすると「宣言を開く」とか出てこなかったっけか?

    キャンセル

  • sanezane

    2018/11/26 01:44

    対象を選択して宣言を開くを選択すると、「エディターのオープンに問題があります。理由:jsug-shop-ch06(プロジェクト名)は存在しません」というダイアログが出てくるんです。。。こちらは質問内容とまた少しズレてしまうので現状は自らで調査中です!

    キャンセル

回答 1

checkベストアンサー

+3

クラスに@Slf4jアノテーションが付いていることからLombokの機能を使ったものだと思います。
下記に引用するように@Slf4jアノテーションをクラスにつけるとprivate static final org.slf4j.Logger logというコードが自動的に生成され、log.debug("....");のようにログ出力が可能となります。

@Slf4j以外にもログ出力に関連するアノテーションがありますが、詳しくは下記リンク先のドキュメントをご覧ください。

@Log (and friends)

You put the variant of @Log on your class (whichever one applies to the logging system you use); you then have a static final log field, initialized to the name of your class, which you can then use to write log statements.

@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/26 09:16

    いつもありがとうございます。
    決まった変数が自動生成できるライブラリが他にもないか調査して見ます。

    キャンセル

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

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

関連した質問

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