Dependency Injection

JavaのSpringフレームワークでAspect Oriented Programming「アスペクト志向言語」に触れる機会があり、かなり以前からある概念ですがはじめてでしたので試してみました。
難しそうな名前がついていますが、私の理解としてはオブジェクト指向言語の弱点を補うある意味苦肉の策的なもののような感じます。しかし処理が疎結合になりコードが見やすくなるメリットがあります。オブジェクトを横断的に共通の処理を注入するしくみで(Dependency Injection: 依存性の注入)、ログ出力処理などがわかりやすい例になります。

参考)
https://www.purin-it.com/spring-boot-aop
https://github.com/purin-it/java/tree/master/spring-boot-aop/demo

下記3つのJavaコードと、resources/application.properties、resources/templates/home.htmlをいろいろと変えながら内容を理解しました。
DemoApplication.java

DemoController.java

DemoInvocation.java

Webアクセスしたときにログを追加して、アクセスの前後で出力している様子をわかりやすくしました。

application.properties

server.port = 8080
logging.level.root = INFO
logging.level.com.example.demo = DEBUG
logging.file = C:/work/logs/demo.log

home.html
は任意の内容

ビルド
以前Groovy / Gradleをテストした環境を使いました。

Groovy / Gradle

build.gradleファイルがあるディレクトリで
gradle build

実行
cd build\libs
java -jar demo2-0.0.1-SNAPSHOT.jar

そして、Webブラウザでlocalhost:8080にアクセスします。

出力ログ

アノテーションを多用して制御するSpringフレームワークの勉強ができたことと、久しぶりにGradleを触って、その便利さをあらためて感じたテストでした。