ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

Java

Spring Boot 2.4 から 4.0 にジャンプアップした話

2025年も、いよいよ終わろうとしています。 大掃除ということで、昔に作ったプロジェクトの開発基盤をバージョンアップしました。 コンポーネント 移行前のバージョン 移行後のバージョン Java 8 17 Spring Boot 2.4.5 4.0.1 JUnit Jupiter 5.7.1 6.0.1 Grad…

Spring Boot CLIでコマンドラインアプリを作る

Spring Bootではコマンドラインのアプリケーションを作るためのインターフェース「CommandLineRunner」が用意されています。 このインターフェースを使って、Spring Bootのコマンドラインアプリを作成してみます。 build.gradle spring-boot-starterを依存関…

Spring Boot GradleプラグインとGraldeのバージョン対応表

Spring Boot Gradleプラグインはバージョンごとに使用できるGradleのバージョンも変わってきます。 plugins { id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.7' } Spring Boot Gradle プラグイン対応表…

GradleのJavaプラグインの種類

GradleでJavaを開発するときに使用するプラグインは java プラグイン java-library プラグイン の二種類があります。 java プラグイン plugins { id 'java-library' } Gradle 1.0から使用できるプラグインで、最新のGradle9系でも使用できます。 java-librar…

GradleのバージョンごとのJavaバージョン指定方法

build.gradleにJavaのバージョンを指定できますが、使用するGradleのバージョンによって書き方が変わります。 Gradle 4~7系 sourceCompatibility = '1.8' // または '11', '17' etc. targetCompatibility = '1.8' 文字列またはJavaVersion型(例: JavaVersi…

Javaでbyte型の値を比較するときに注意すること

byte型の値の範囲 Javaのbyte型は1バイトで値を表現する方です。 大事なことは「符号付整数」である点です。 表現できる値の範囲は -128~127 になります。 何をいまさら、と思うかもしれませんが、意外と実装するときに忘れがちです。 byte型の値の比較 次…

Spring FrameworkのBeanのスコープ指定方法

Spring FrameworkでBeanのスコープを指定するときに、どのように指定してますか? @Scopeアノテーションを使う方法 @Scopeアノテーションの属性にスコープを指定してBeanのスコープを定義する方法です。 @Component @Scope("request") public class RequestS…

Eclipseで始めるJakarta EE 10プログラミング超入門 ③ - JPAアプリケーションの作成

データベースにアクセスするアプリケーションを作るとき、どのような方法でデータベースアクセスを実装してますか?やっぱりMyBatis?まさかのJDBC? Jakarta EEではデータベースアクセスのフレームワークとしてJPA (Jakarta Persistence PI) というものが用…

Eclipseで始めるJakarta EE 10プログラミング超入門 ② - Servletアプリケーションの作成

Jakarta EEのアプリを作ったことがなくても、JavaでWebアプリを作ったことがあるなら「サーブレット」という言葉が聞いたことがあると思います。 「サーブレット」はJavaでWebアプリケーションを構築するうえで、基本的で低レベルな方式となります。 今回は…

Eclipseで始めるJakarta EE 10プログラミング超入門 ① - Gradleプロジェクトの作成

Jakarta EE (旧Java EE)でアプリを作ってみたいけど、Jakarta EEは難しそうだしなー。とりあえず簡単に始められるSpring Bootでいいか。 という方、多くないですか?そもそも、Spring Bootがあるから、Jakarta EEは興味ない!って人も多いと思います。 Jakar…

Jakarta EE (Java EE) Topics - @Inject or @EJB ?

Java EEではコンポーネントの管理に「CDI」と「EJB」があります。 どちらかで統一したいところですが、それぞれ役割が分かれていて、Backing Beanのような画面のコンポーネントは「CDI」、ビジネスロジックや永続化のコンポーネントは「EJB」と、使い分ける…

Jakarta EE (Java EE)のバージョン情報

2022/9に、5年ぶりのメジャーバージョンアップであるJakarta EE 10が発表されました。 いろいろと変更が入っていますが、注目すべき点としてはCDI 4.0で、Enterprise Bean (EJB) の代替手段がCDIに用意されたことです。これにより、今まではプレゼンテーショ…

よくあるDIの勘違い② - InjectしたBeanのフィールドに直接アクセスしてはいけない

Spring FrameworkでDIするBeanクラスや、Java EEのCDI Beanクラスにフィールドを定義して状態を持たせることがあります。 @RequestScope public class ReqScope { public String request = "Request-1"; public String getRequest() { return this.request; …

よくあるDIの勘違い① - 異なるスコープを持つBeanの親子関係

Spring FrameworkのDIや、Java EEのCDIの対象となるBeanには「スコープ」が定義されてます。 この「スコープ」の定義によって、Beanのライフサイクルが変わることは広く知られていると思います。 例えば、アプリケーションスコープのBeanは、アプリケーショ…

GitLabでCI/CD - Javaプロジェクトのビルドとテスト

みなさん、GitLabを使ってますか? GitLabは、クラウド、オンプレ、Dockerと様々な環境で利用できるGitのリポジトリマネージャーです。 オンプレで利用できることから、社内の開発プロジェクトで利用するケースも多いです。Dockerイメージを使って環境を構築…

Java Tips - メソッドの復帰値の型を総称型も含めて取得する

Javaでプログラム内からメソッドの情報を取得する場合、java.lang.reflect.Methodクラスを使用して取得することができます。 今回、以下のメソッドの復帰値の型を取得します。 public List<String> getStringList() { ・・・ } メソッドの復帰値の型を取得 java.lang</string>…

Lombok - アノテーション一覧

定型的で冗長なコードの実装を省くことができるLombok。 @Getterや@Setter、@Dataアノテーションぐらいしか使ったことがない人も多いと思いますが、これら以外にも便利なアノテーションが用意されています。 個々のアノテーションの詳細な説明は別記事で取り…

なぜequalsとhashCodeの両方をオーバーライドする必要があるのか

Javaで、データを格納するためのBeanクラスを作成したときに、ほとんどの場合、getter、setterも併せて実装します。 それとは別に、コンストラクタやequalsメソッド、hashCodeメソッドも実装するかもしれません。 今回は、このequalsメソッド、hashCodeメソ…

Java Tips - Map変換 Collectors.toMapでNullPointerException

みなさん、Stream API使ってますか? Java8で導入されたStream APIですが、メソッドが多くて、なかなかすべてを覚えられません。 今回は、Streamの結果をMapに変換する方法のお話です。 Collectors.toMap Stream APIでMap変換を実装しようとすると、最初に思…

Spring Tips - DI 依存性の注入のメリット

Spring Frameworkに限らず、Javaのフレームワークといえば、この「DI - 依存性の注入」というものが用意されていて、このDIを使用することが前提になっています。 このDI、みなさん理解していますか? フレームワークの作法だから、なんとなくDIを使ってる。…

Java Tips - Mapの初期化

java.util.Mapオブジェクトの初期化方法いろいろです。 putメソッドを使って初期化 基本ですね。初期化するエントリごとにMapインターフェースのputメソッドを使用して初期化します。 Map<String, String> fruits = new HashMap<>(); fruits.put("apple", "リンゴ"); fruits.</string,>…

Java Tips - Setの初期化

java.util.Setオブジェクトの初期化方法いろいろです。 addメソッドを使って初期化 基本ですね。初期化する要素ごとにSetインターフェースのaddメソッドを使用して初期化します。 Set<String> fruits = new HashSet<>(); fruits.add("apple"); fruits.add("orange");</string>…

Java Tips - Listの初期化

java.util.Listオブジェクトの初期化方法いろいろです。 addメソッドを使って初期化 基本ですね。初期化する要素ごとにListインターフェースのaddメソッドを使用して初期化します。 List<String> fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("oran</string>…

Java15の新機能・変更点

Java誕生から25周年を迎える、2020年9月15日にJava15がリリースされました。 forest.watch.impress.co.jp Java15の新機能・変更点について解説します。 339: Edwards-Curve Digital Signature Algorithm (EdDSA) 360: Sealed Classes (Preview) 371: Hidden …

Javaで文字コード変換時のUnsupportedEncodingExceptionを回避する

Javaで文字コードを変換するコードを書く Javaで文字コードを指定するケースって、あんまり遭遇しませんが、業務アプリを作ってると、たまーに文字コードを指定するケースに遭遇します。 例えば、文字列をUTF-8に変換するユーティリティ・メソッドを作成しま…

一時的にSpringSecurityによる認証を無効化したい

一時的にSpringSecurityによる認証を無効化したいときは、 スプリングブートアプリケーションのクラスに@SpringBootApplicationを付与する。 @SpringBootApplication(exclude = SecurityAutoConfiguration.class) // これ public class Application { public…

JDK9で追加されたofメソッドについて

java JDK8までは「Stream系APIの検証をしたく、仮のコレクションをいったん作成したい」 というとき、以下のように書いていました。 JDK8まで // [1]StringからStream Stream<String> streaml = Stream.of("A","B","C","D","E"); // [2]配列からStream Stream<String> stream</string></string>…

Lombokの使い方

SetterとGetterをソースに記述する手間を省略してくれるLombokライブラリの使い方について。 手順 「Lombok download」で検索するとトップに出てくるサイトでjarファイルをダウンロード。 「eclipse」フォルダ内にある、「plugins」フォルダの中にダウンロー…

ファクトリメソッドパターンとは

ファクトリメソッドパターンは、オブジェクトを取得するメソッドを実装するパターンです。利用側はオブジェクトの作成手順や作成されるオブジェクトの種類を意識せずにオブジェクトの取得を行えます。 また、 通常コンストラクタを呼び出し、オブジェクトを…

シングルトンパターンとは

Singletonパターンはクラスから一つしかオブジェクトが生成されないことを保証するパターンです。 SpringのControllerもSingletonパターンを実現しています。 Singletonではないクラスを書いた場合、たとえば1万人から要求があると、1万個のインスタンスを生…