JAVA Spring Bootのまとめメモ
MQ連携(メッセージキューイング)
ライフサイクル
複数のプラグインを内包するもの
ゴール
プラグインには1つ以上のゴールを持つ
ゴールが最小単位
ライフサイクル>プラグイン>ゴール(コマンド1つくらいの単位)
static 変数
Atomic操作
JAVAの並行処理の手法
解決方法
→count 変 数を int 型ではなく、AtomicInteger クラスを使用する。(スレッドセーフクラスを使用する)
classクラスがある
→classが何ができるのか定義されている
アノテーション
Spring Bootの作法
@を使うとクラス名を定義できる
@SpringBootApplication アノテーションによりこのクラスのパッケージ配下のコ ンポーネントスキャンやその他自動設定などが有効となる
Spring Framework
→DI(Dependency Injection)設定パターン(DIコンテナ)
→自分が使いたいインスタンスを外部から設定してもらう。(≒newがなくなる。)
DIコンテナにインスタンスと登録方法は以下
JavaConfig による明示的な登録
コンポーネントスキャンによる自動登録
コ ンポーネントスキャン
コンポーネントスキャンによる自動登録
→@hogafugaと@マーク(アノテーション)をつけると使用することができる。
→@serviceとすると、serviceという名前でインスタンス化される。
@Bean
Spring Frameworkの言葉。
ここも参考になる
インジェクション
DI コンテナの管理対象となったインスタンスをインジェクション(注入)させるには @Autowired を付与します。対象の型が一致するインスタンスを DI コンテナが自動で注入 します。Spring Framework の DI コンテナは、以下の 3 種類のインジェクション方法をサポー ト
コンストラクタインジェクション
フィールドインジェクション
セッターインジェクション
→DI の実装方法としてコンストラクタインジェクションを使用すべき
推奨されている方法はコンストラクタインジェクションです。インジェクションするフ ィールドに final を指定することを推奨します。利点は以下
テスト時にモックに差し替えやすい
final を指定することで、内部メソッドまたはサブクラスでフィールドを書き換えら れるのを防止できる(書き換えるコードを記述するとコンパイルエラーとなります)
Compliant Solution(解決方法)
@RestController
@RequestMapping("/antipattern")
public class InjectionController {
private final InjectionService service;
public InjectionController(InjectionService service) {
this.service = service;
}
@GetMapping("injection")
public String injection() {
return service.getMessage();
}
}
AOP
AOP とは Aspect Oriented Programmingの略で、アスペクト指向に基づいたプログラミングのこと
クラスの持つ責務に基づいて、クラス内には本質的な処理だけを記述で きるようにするために使用する技術
AOPを使うと、トランザクション(コミットあるいはロールバック)やlogger・例外処理を、クラスとして纏めることができる。
主な例外クラスの種類
<検査例外と非検査例外>
Java における例外には大きく「検査例外(チェック例外)」と「非検査例外(非チェック例外)」がある
・検査例外とは
検査例外は java.lang.Exception クラスのサブクラスの内、java.lang.RuntimeException のサブクラスでないものを言います。検査例外は、メソッドまたはコンストラクタ throws 節で宣言する、または try~catch で捕捉し例外処理をあらかじめプログラムする必要があ ります。未実装の状態ではコンパイルでエラーとなります。
一般的に、プログラムで回復不能な例外をあらかじめ定義する際に使用されます。
・非検査例外とは
非検査例外は java.lang.RuntimeException のサブクラスを言い、実行時例外とも呼ば れます。非検査例外はメソッド、またはコンストラクタ実行時に発生し、コンパイル時点で はどの非検査例外が発生するのか確認することができません。
一般的に、データとプログラムの不整合など、事前に対処しておくべき事象で発生します。
${}は使ってはだめ。
SQLインジェクションの原因になる
→#{}を使用すべし
ログ出力ライブラリ
SLF4Jでプログラムは書かれている。
ログ出力用ライブラリには以下のように様々なものがある
Log4J
java.util.logging(Java 標準機能)
Logback
→デフォルトのライブラリは「Logback」
Controller→Service→Repository
MVCで言えば、
C=Controller
V=Service
M=Repository
的な感じ
singleton スコープ
@Component を付与したクラス(Bean)のスコープは、デフォルトでsingleton になります。 インスタンス化されるのは 1 度だけです。
@Component を含んでいる、@Controller、 @RestController、@Service、@Repository を付与したクラスも同様となります。
singleton スコープは不必要なインタンス生成をせず、サーバに負荷をかけないため、推 奨される設定となります。