本章では、Spring Bootで特定のコントローラーに対して、共通の処理を行う場合の方法について共有します。 インターセプターの役割 WEB開発をしていて、クライアントからのリクエストに対する処理を共通化したい場合があるかと思います。例えば、ログの書き出し、二重POSTの制御、セッション情報の検証など。そのような場面で、リクエストを受け取る個別のハンドラすべてに処理を記述していては開発コストがかかり、後のリファクタリング作業にも影響を及ぼしかねません。そこでSpringで、コントローラーの前後で特定の処理を挟み込む方法について紹介します。 実装 インターセプター まず、インターセプトの処理の記述方法を伝えます。Springでは、コントローラーの実行前、ビューのレンダリング前、ビューのレンダリング後に処理を挟み込めます。 import javax.servlet.http.HttpServ
Scheduledアノテーションを使うと、スケジュールされたタイミングでメソッドを実行することができます。 これで周期実行的なものは、簡単に実装できます。 Getting Started · Scheduling Tasks 34. Task Execution and Scheduling 実装方法 実行したいメソッドにScheduledアノテーションを付けます。 @Component public class Scheduler { @Scheduled(fixedRate = 5000) public void doSomething() { // 5秒周期で行いたい処理 } } Scheduledアノテーションによる実行を有効とするためには、EableSchedulingアノテーションを付けます。 @SpringBootApplication @EnableScheduling p
@Asyncアノテーションとは 非同期に処理を実行できるようにする仕組み。 参考 7. Task Execution and Scheduling 参考 Spring MVC(+Spring Boot)上での非同期リクエストを理解する -前編- 簡単なサンプル pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> 非同期にする処理に@Asyncを付与する。(@Asyncはメソッド単位でもクラス単位でも付与できる) @Slf4j
@AspectJアノテーションでアスペクトを定義するやり方について説明します。なお@AspectJスタイルは、そもそもAspectJ5で導入されたものです。SpringではAspectJで定義するアノテーションと連携します。AOPのランタイムはあくまでSpringのものであり、AspectJとは関係ありません。(APIだけぱくった)実際にAspectJと連携する例については、7.8で説明します。 7.2.1 Enabling @AspectJ Support @AspectJアノテーションを使うためには、@AspectJアノテーションベースのAOP/自動プロキシ生成の機能を適用する設定をします。まぁ要するにこう書けばいいわけです <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.o
カスタムクラスローダを作ってみるに引き続き、リフレクションとかで遊ぶ。アノテーションでなんかしてみる。 MyAnnotation.java import java.lang.reflect.Method; import java.lang.annotation.Annotation; import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; public class MyAnnotation { public static void main(String[] args) { Class clazz = MyAnnotation.
You will build an application that prints out the current time every five seconds by using Spring Framework’s @Scheduled annotation.
@Entityアノテーションと@Idアノテーション @Tableアノテーション @GeneratedValueアノテーション @Columnアノテーション @Transientアノテーション @MappedSuperclassアノテーション 次回は @Entityアノテーションと@Idアノテーション まずは、これが無いと始りません。@Entityは該当のクラスがエンティティであることを指定し、@Idはプライマリキーとなるプロパティかフィールドを指定します。 @Entity public class Customer { @Id private Long id; private String firstname; private String lastname; // ・・ } @Idは以下の様に指定することもできます。というかこっちの方が一般的か? @Id public Long getI
初歩的な内容になりますが、Spring Bootを使って開発していると「No qualifying bean of type・・・・」ってエラーを見かけることがあります。だいたいログの内容はこんな感じです。 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.domain.repository.CustomerRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} インスタンスが見つ
SpringアノテーションをJavaと並べてまとめ クラス対象のアノテーション Springアノテーション @Component SpringDIコンテナにbeanとして登録したいクラスへ付与する bean定義ファイル(.xml)のタグと同じ働き bean名をつけたいときは下記のようにする @Component("name") このアノテーションを使うとこはbean定義ファイルに「」を記述しておくこと @Service @Componentと基本的には同じ働きをするが、Service層(ビジネスロジック等)を対象としている Service層とその他のbeanの違いを明確にするために使用する このアノテーションを使うとこはbean定義ファイルに「」を記述しておくこと @Repository @Componentと基本的には同じ働きをするが、Persistence層(DAO等のDBアクセスを行
概要 Spring Bootでtaskを定期的に実行する方法 環境 下記の環境で動作確認を行いました。 Windows7 (64bit) Java 1.8.0_45 Spring Boot 1.2.4 Maven 3.3.3 参考 下記のサイトを参考にさせて頂きました。 Spring GETTING STARTED - Scheduling Tasks 設定 EnableSchedulingアノテーション スケジュールを有効にするにはEnableSchedulingを使用します。 package com.example.actor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org
アノテーションの中でも、Java SE標準で提供されているアノテーションのことを、標準アノテーションと呼びます。Java SE 8の時点では、以下のようなものがあります。 オーバーライドを明示する – @Overrideアノテーション そのメソッドがスーパークラスのメソッドをオーバーライド(上書き)していることを宣言します。省略しても動作自体に支障はありませんが、明示することでメソッド名や引数にタイプミスがあった場合には、コンパイラーが警告を発生します。 Triangle.java package com.example.mynavi.object; public class Triangle implements IAreable { ...中略... @Override public double getArea() { return base * height / 2; } }
Seasar2でAOPは散々使ってきたが、Springではまだ使ったことなかったので、どんな感じになるのか簡易なコマンドラインアプリケーションで試してみた。今更感があるのでAOPとは?の説明はここでは省略。Spring AOPはXMLで設定を記述する方法もあるが、今回はアノテーションベース + Spring Bootで試してみた。 用語の整理 とはいえまず最初に用語の整理をしてみる。正直AOPでよく聞く用語は公式を直訳すると結構分かりづらく、あまり直観的ではないので語弊を恐れず簡潔に定義したい。 Aspect(アスペクト) 複数のクラスにまたがる関心事をモジュール化したもの(まとめたもの)。 JoinPoint(ジョインポイント) Advice(下記参照)を挿入する場所。場所といってもソースの特定の位置というわけではなく、メソッド(やコンストラクタ)の実行前、メソッド(やコンストラクタ)の
「C:\tmp」というフォルダに「hoge.txt」があるとする。 このhoge.txtを指定するには「C:\tmp\hoge.txt」と指定しなければいけない。 しかしこのとき、フォルダの末尾に「\」がちゃんと書いていないと、 「フォルダ」と「パス」が別々に指定されていたときに、ファイルをちゃんと見つけることができない。 具体的には、このような場合だ。 フォルダとファイルが別セル書かれている。 それぞれの値を利用して、ファイルを開きたいが、パスの末尾にセパレータが書いてあるかはわからない。 なので、ちゃんとセパレータをチェックしよう。 コード例 以下のサンプルでは、フォルダの末尾が「\」であるかを確認して、「\」でなかった場合に「\」を追加している。 Option Explicit Sub ファイルのパスを調べる() Dim orgFolderPath As String Dim fil
BeanValidation(JSR-303)のアノテーションとして「@Valid」がありますが、これは、Spring MVCでControllerでCommandに対して値を検証したい場合に利用できます。 また、Spring自体にも似たアノテーション「@Validated」(org.springframework.validation.annotation.Validated)が存在します。 ただし、@Validatedは、Spring3.1から追加されたものです。 違いは、Springの「@Validated」では、グループが指定できるということです。 Spring MVCでは、通常は「@Validated」を使用するべきですが、公式のマニュアルを見ると、@Validatedではなく@Validでサンプルが説明されています。 import org.springframework.ste
それぞれの指定の意味する場所は、以下のようになっている。 @LocationExampleAnnotation //TYPE:クラス定義やインターフェース定義をする場所 public class アノテーションを付けるサンプル { @LocationExampleAnnotation //FIELD:フィールド(メンバー変数)定義 protected int value; @LocationExampleAnnotation //CONSTRUCTOR:コンストラクター定義 public アノテーションを付けるサンプル() { } @LocationExampleAnnotation //METHOD:メソッド定義 public void メソッド() { } public int 引数ありメソッド( @LocationExampleAnnotation //PARAMETER:パラメータ
こんにちは、imamotoです。 私は入社4年目で、今まではほとんどPHPで開発する案件に参画していましたが、今年の1月から新たにJavaの案件に参画しています。 そちらの現場では週1回、開発メンバーでホスト持ち回りでJavaの勉強会を行っていて、先日私もJavaのアノテーションについてプレゼンを行いました。 Javaとガッツリ向き合うのはほぼ入社時の研修以来で、アノテーションについても細かいことはあまり知らず、基本的なことから改めて勉強する良い機会となりました。 せっかく資料も作ったのでその時発表した内容をこのブログにも書いてみようと思います。 プレゼン資料(改) Java Annotation from ip-imamoto アノテーションとは アノテーション とは「注釈」を意味し、クラスやメソッド、パッケージに対して付加情報を記入する機能です。 Java SE 5で追加され、以下のコ
今日は勉強会の当番だったので、リフレクションとアノテーションについて話しました。 以下資料。 リフレクション リフレクションとは クラスのフィールド、メソッドなどの情報を取得したり、クラスを生成したり、メソッド名の文字列を使ってメソッドを呼び出したりすることができるAPIです。 Javaで自作フレームワークを作ろうと思ったら、リフレクションを使うと便利なので、ぜひ勉強しておきたい内容です。 以下のクラスをリフレクションで扱います。 public class Hoge{ String name; public String getName(){ return name; } public void setName(String name){ this.name = name; } } Class ClassはJavaのクラスの情報を得るためのクラスです。 以下のいずれかの方法でClassクラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く