2018年7月18日水曜日

Spring : @Controller、@Service、@Repository、@Component

Springのアノテーション、@Controller、@Service、@Repository、@Componentの4つなのだけれど、いまいち動きの違いがよく分からなかったので調べてみた。

どうやら、基本的には同じ動きをするらしく、これらのアノテーションが付与されたクラスをSpringのDIコンテナにビーンとして登録する。

コントローラ層には@Controller、サービス層には@Serviceというふうになる。アノテーションを見れば役割が分かるので、見た目には分かりやすいではある(それ以上の理解が出来なかった)。

@Controller
コントローラ層のクラスに付与する。リクエストやレスポンスなどのフロントとのやり取りに関わる処理を記述するクラスがこのアノテーションを使用する。

@Service
サービス層、つまりビジネスロジックなどが記述されるクラスに使用する。

@Repository
DAOなどのDBアクセスを担うクラスに使用する。

@Component
上記の3つ以外の役割でDIコンテナに登録しておきたいクラスに使用する。

2018年7月5日木曜日

Spring : トランザクションの管理

Springでは@Transactionアノテーションを使うと簡単にトランザクションの管理を行える。プログラミングによって管理をすることも出来るが、この記事では@Transactionアノテーションについて書いていくことにする。

package example;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class TransactionalClass {
    public void update(String str) {
        // 何か処理を行う
    }
    public void update2(String str) {
        // 何か処理を行う
    }
}

上記のようにクラスに@Transactionアノテーションを付与すると、そのクラス内のすべてのメソッドがトランザクション制御されることになる。メソッド単位でトランザクション制御したい場合は下記のようにメソッドに@Transactionアノテーションを付与する。

package example;

import org.springframework.transaction.annotation.Transactional;

public class TransactionalClass {
    @Transactional
    public void update(String str) {
        // 何か処理を行う
    }
    public void update2(String str) {
        // 何か処理を行う
    }
}

2018年7月3日火曜日

Spring : @Serviceアノテーション

Springでサービスレイヤを扱うクラスには@Serviceアノテーションをつける。主に業務プロセスを表現するのだけれど、@Serviceクラスの働きについてはいまいち理解していなかった。取りあえずおまじないのようにつけて、それでも動作してしまうものだから気にしてこなかったのだ。

調べてみたら、@Serviceアノテーションが設定されると、クラスがDIコンテナへの登録対象となるらしいことが分かった。

使いかたは以下のようになる。

Serviceクラス
package example;

import org.springframework.stereotype.Service;

@Service
public class ServiceClass {

}

Serviceクラスを呼び出すControllerクラス
package example;

import org.springframework.stereotype.Controller;

@Controller
public class ControllerClass {

    // サービスクラスがDIされる。
    @Autowired
    ServiceClass service;

}

2018年7月1日日曜日

Spring : data.sql が動作しない

Spring Bootではクラスパス直下のdata.sqlが起動時に実行されるらしい。なので、src/resources/data.sqlにSQLを記述して実行してみた。



初期データ投入が手軽になるなあ、と思っていたのだけれど上手く動いてくれない。SQL実行ツールでSQLを実行すると正常に動作したので、記述したSQLそのものに不備があるわけではなさそうだ。

なにか、data.sqlの実行には条件があるのだろうか?