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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Spring Boot

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

Q&A

解決済

1回答

3161閲覧

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

sanezane

総合スコア91

Java

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

Spring Boot

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

0グッド

1クリップ

投稿2018/11/25 16:34

お世話になっております。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自体もあまり慣れていないためまだ宣言箇所を特定できておりません。。。

SqlFinder

1package demo.domain.repository; 2 3import lombok.extern.slf4j.Slf4j; 4import org.springframework.cache.annotation.Cacheable; 5import org.springframework.core.io.ClassPathResource; 6import org.springframework.core.io.Resource; 7import org.springframework.stereotype.Component; 8import org.springframework.util.StreamUtils; 9 10import java.io.IOException; 11import java.io.InputStream; 12import java.nio.charset.StandardCharsets; 13 14@Component 15@Slf4j 16public class SqlFinder { 17 18 @Cacheable("sql") 19 public String get(String path) { 20 Resource resource = new ClassPathResource(path); 21 log.info("load {}", resource); //ここで使えているのはなぜ?? 22 try (InputStream stream = resource.getInputStream()) { 23 return StreamUtils.copyToString(stream, StandardCharsets.UTF_8); 24 } catch (IOException e) { 25 throw new IllegalArgumentException(path + " is not found!", e); 26 } 27 } 28} 29

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2018/11/25 16:39

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

2018/11/25 16:44

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

回答1

0

ベストアンサー

クラスに@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/25 23:24

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanezane

2018/11/26 00:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問