JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

SpringAIのきほんのき

## Hello SpringAI
[SpringAI](https://spring.pleiades.io/spring-ai/reference/)はSpringの**AIアプリケーションフレームワーク**です。テキスト生成に限らず画像生成AIや音声生成AIにもサポートを広げています。
テキスト生成においては他のLangChain4jと同じように、さまざまな開発補助をしてくれます。

![スクリーンショット 2024-05-31 11.18.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801871/970357ce-291e-cec6-9c4a-3775c06134d6.png)

GPTなどの主要なLLMサービスには対応しており、簡単なコードの実装でLLMが動作するアプリを開発することができます。
ローカルLLMに対しては[Ollama](https://ollama.com/)経由で対応しています。

Ollamaやllama.cppについては、以下のとおりになります。

|名前|説

元記事を表示

【SpringSecurity】5.4.6から5.4.7に上げた時に発生したFilter順序不正について

# 背景
SpringFrameworkのバージョンを上げたことでエラー画面からログイン画面に戻れなくなったため、確認したのがきっかけです。
Controllerを通過せずにエラーになっていたため、SpringSecurityのTRACEログを確認したところ、SessionManagementFilter通過後の挙動が異なっていることがわかりました。

# 【前提】SpringSecurityとは?
> Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spr

元記事を表示

備忘-直列化 & static

## 直列化
インスタンスをバイト列に変換したり、その反対をしたりすることができる仕組みのことです。直列化することにより、ファイルを保存したり、ネットワークで送ったりすることができる様になります。直列化対象のクラスは、java.io.Serializableを実装することが必要になります。

“`java
public class Product implements Seralizable {
private String name;
private Deals id;
private int price;
}
“`

ProductsクラスとDealsクラスが直列化を実装していた場合、Productsインスタンスを直列化したときにDealsインスタンスも直列化されます。一方でDealsクラスが直列化を実装していなかった場合はバイト列に変換されたとき、Dealsインスタンスの情報は含まれません。また、復元した場合、idフィールドがnullの状態で復元されます。

加えて、直列化した後に資産が更新された場合、直前で直列化してしまったファイルは矛盾が生

元記事を表示

Javaで「do..while文を使った繰り返し処理」の動作を確認してみた

# 概要

Javaで「do..while文を使った繰り返し処理」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/for/index7.html

# 実装

以下のファイルを作成しました。
“`JSample7_1.java
import java.util.Random;

class JSample7_1{
public static void main(String[] args){
int num;
Random rand = new Random();

System.out.println(“6が出たら終わりです”);

do{
num = rand.nextInt(6) + 1;
System.out.println(“no = ” + num);
}while (num != 6);
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample7_1.java
$ java JSample7

元記事を表示

javaとtypescriptの開発3日目

前回からToDoアプリケーションを作成しました。
ブラウザ表示は簡素なものとなっていますが、サーバーからCRUPを行うAPIを実行できるようになっているので満足しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631649/7dd124f0-7f14-3d9c-d0f9-915788ee25d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631649/bacca9ca-8cbe-be03-d160-94139d8d5404.png)

最終的にこのようなディレクトリ構造になりました。
後学のために各ファイルの役割をメモも併せて記載するとこうなります。

my-java-ts-project/
├── demo/ # バックエンド (Spring Boot)
│ ├── Dockerfile # Docke

元記事を表示

【JavaGold SE8】ラムダ式とは何ぞや

## はじめに
**ラムダ式**って初見だと読めない独特なスタイルですよね。
ちょっと整理してみます。

## 1.ラムダ式の基本形
こんなやつ
“`java
Runnable r = () -> System.out.println(“OK”);
// (引数リスト) -> メソッドの実装

// 引数ありバージョン
Consumer consumer = (str) -> System.out.println(str);

// 戻り値ありバージョン
Supplier supplier = () -> {return “OK”};
“`

## 2.なんのため?
匿名クラスの実装を簡潔に記述するために利用する。

#### ちょい脱線 「匿名クラス(無名クラス)」とは何か
まず、ローカルクラスというメソッドの処理中にクラスを宣言して利用できる仕組みがある。
##### ローカルクラス
“`java
public static void main(String[] args) {

class Local implements Runnabl

元記事を表示

【Java】継承とオーバーライドを覚える

通常のクラスのインスタンス化に対して、スーパークラスを継承したサブクラスをインスタンス化すると何ができるのか、覚えるための自分用メモです。

# 継承とは?
既存のクラスのフィールドとメソッドを引き継いで、新しいクラスを定義することです。
例えば、以下のクラスを“`Cat“`クラスに継承するとします。
“`java:Animal.java
public class Animal {
String name;

public Animal(String name) {
this.name = name;
}

public void talk() {
System.out.println(“私は” + this.name + “です。”);
}
}
“`
その場合、以下のように記述します(親クラスに引数なしのコンストラクタが無い場合、“`super()“`でコンストラクタを呼び出す必要あり)。
“`java:Cat.java
public class Cat extends Animal {
p

元記事を表示

javaとtypescriptでの環境構築

前回javaとtypescriptの環境構築を行い、その後ホットリロード(ymlファイルにマウント設定追加しただけ)を実装しました。

次に、今回のアプリケーションで使うdbを設定します。
簡易的に 下記ファイルを含むmysqlフォルダを作りました。
my.cnf: MySQLの設定ファイル。
init.sql: データベース初期化用SQLスクリプト。

現在のディレクトリツリーはこちらになります。
javaのディレクトリ名がspring bootで設定しなかったのでdemoのままになってたりtypescriptのディレクトリ名がmy-appで違和感ですね…
命名はちゃんとしましょう

my-java-ts-project/
├── demo/
│ ├── Dockerfile
│ ├── pom.xml
│ ├── mvnw
│ ├── .mvn/
│ │ └── (その他のMaven設定ファイル)
│ └── src/
│ ├── main/
│ ├── java/
│ │ └── com/

元記事を表示

【JavaEE】CDIのDI

## まえがき
研修でJavaEEを学んでいる中で、CDIのインジェクションに苦しみました。とりあえず、現時点で理解したところまでを備忘録として書き留めました。

## CDIとは
簡単に言うと、newを使わずにインスタンス化する仕組みのことです。
Context and Dependency Injectionの略で、訳は「コンテキストと依存性注入」。
今回はDIの部分である依存性注入についてまとめます。

### 結局何がいいのか

– クラス間の依存関係を弱くしてくれる(疎結合に)
– テストしやすくなる
– インジェクトするクラスとされたクラスのスコープを互いに独立関係にできる

## 依存性注入

通常、とあるクラスで別のクラスのオブジェクトを使う場合、

“`java:Game.java
public class Car {
Tire tire = new Tire();
public void CreateCar(){
start(tire);
}

}
“`
というようにnewを使ってインスタンス化する。

元記事を表示

Javaプログラミング入門:ステップ8 デプロイとテスト

# Javaプログラミング入門:ステップ8 デプロイとテスト

ステップ8では、開発が完了したプロジェクトをテストし、本番環境にデプロイする方法について解説します。テストは品質を保証し、デプロイはユーザーに提供するために重要なプロセスです。

1. テストの実施
– 単体テストの作成
– 結合テストの実施
– ユーザビリティテスト
2. デプロイ
– 本番環境へのデプロイ
– デプロイ後の確認とフィードバック

## 1. テストの実施

### 単体テストの作成

単体テストは、プログラムの各部分(メソッドやクラス)が正しく動作することを確認するためのテストです。JUnitを使用して単体テストを作成します。

#### JUnitの設定

Mavenプロジェクトの場合、`pom.xml`に以下の依存関係を追加します。

“`xml

junit
junit
4.13.2

元記事を表示

Javaプログラミング入門:ステップ7 実践的な開発

# Javaプログラミング入門:ステップ7 実践的な開発

ステップ7では、これまで学んだ技術を統合し、実際のプロジェクトに適用していきます。具体的には、Web画面にデータを表示し、データの登録処理を行う方法を学びます。HTMLとプログラムの連携を通じて、動的なWebアプリケーションを構築します。

1. プロジェクトに必要な技術の統合
2. Web画面にデータを表示
3. 登録したデータの処理
4. HTMLとプログラムの連携

## 1. プロジェクトに必要な技術の統合

まず、プロジェクトで必要な技術を統合します。これには、以下の要素が含まれます。

– **Webフレームワーク**: Struts、Spring MVCなど
– **データベースアクセス**: JDBC、ORM(Hibernateなど)
– **フロントエンド**: HTML、CSS、JavaScript

これらの技術を組み合わせることで、Webアプリケーションの基盤を構築します。

## 2. Web画面にデータを表示

データベースからデータを取得し、Web画面に表示する方法を学びます。

### データの

元記事を表示

Javaプログラミング入門:ステップ6 プロジェクトの準備

# Javaプログラミング入門:ステップ6 プロジェクトの準備

プロジェクトの成功には、適切な準備と計画が不可欠です。本記事では、要件定義とプロトタイプの作成、そしてJSONのパース方法について解説します。

1. 要件定義の基本
2. プロトタイプの設計と実装
3. JSONのパース

## 1. 要件定義の基本

要件定義は、プロジェクトの目的や機能を明確にするための重要なプロセスです。要件定義には、以下のステップが含まれます。

### ユーザー要件の収集

プロジェクトのステークホルダーやエンドユーザーから要件を収集します。インタビュー、アンケート、ワークショップなどの方法を使用します。

### 機能要件と非機能要件の定義

– **機能要件**: システムが提供する具体的な機能や動作を定義します。
– **非機能要件**: システムの性能、セキュリティ、ユーザビリティなどの品質に関する要件を定義します。

### 要件ドキュメントの作成

収集した要件をドキュメントにまとめ、ステークホルダーと共有します。ドキュメントには、要件の概要、詳細な仕様、優先順位などを含めます。

元記事を表示

Javaプログラミング入門:ステップ5 開発環境の構築

# Javaプログラミング入門:ステップ5 開発環境の構築

Webアプリケーション開発の効率を高めるためには、適切な開発環境の構築が重要です。本記事では、Eclipseを使用したJava開発環境の構築方法と、XAMPPとTomcatを使用したWebアプリケーションのデプロイと実行方法について解説します。

1. Eclipseの基本操作
2. プロジェクトの作成と管理
3. デバッギングツールの使用
4. XAMPPとTomcatの使用

## 1. Eclipseの基本操作

Eclipseは、Java開発において広く使われている統合開発環境(IDE)です。Eclipseの基本操作を理解することで、効率的に開発を進めることができます。

### Eclipseのインストール

1. [Eclipseの公式サイト](https://www.eclipse.org/downloads/)からEclipse IDE for Java Developersをダウンロードします。
2. ダウンロードしたファイルを解凍し、インストーラを実行します。
3. インストールが完了したら、Eclips

元記事を表示

Javaプログラミング入門:ステップ4 データベースとの連携

# Javaプログラミング入門:ステップ4 データベースとの連携

Webアプリケーションにおいて、データベースとの連携は欠かせません。Javaでは、JDBC(Java Database Connectivity)を使用してデータベースにアクセスできます。本記事では、データベースとの連携を学ぶためのステップ4として、以下の内容を順を追って解説します。

1. JDBCの基本操作(接続、クエリ実行、結果の処理)
2. DB2の基本的な操作方法
3. データベースアクセス層の設計

## 1. JDBCの基本操作(接続、クエリ実行、結果の処理)

JDBCは、Javaプログラムからデータベースに接続し、SQLクエリを実行するためのAPIです。JDBCの基本操作は、次のように進めます。

### データベース接続

データベースに接続するためには、JDBCドライバをロードし、`DriverManager`を使用して接続を確立します。

### SQLクエリの実行

接続が確立したら、`Statement`または`PreparedStatement`を使用してSQLクエリを実行します。

##

元記事を表示

Javaプログラミング入門:ステップ3 フレームワークの習得

# Javaプログラミング入門:ステップ3 フレームワークの習得

JavaのWebアプリケーション開発において、フレームワークを利用することで効率的に開発を進めることができます。Strutsは、Java EE(Enterprise Edition)プラットフォーム向けの代表的なフレームワークの一つです。本記事では、Strutsの基礎を学ぶためのステップ3として、以下の内容を順を追って解説します。

1. Strutsの基本概念
2. Strutsの設定(struts-config.xmlなど)
3. アクションフォームとアクションクラスの作成
4. JSPとの連携

## 1. Strutsの基本概念

Strutsは、Apache Software Foundationが開発したMVC(Model-View-Controller)アーキテクチャに基づくWebアプリケーションフレームワークです。Strutsは、以下の主要コンポーネントで構成されています。

– **モデル(Model)**: ビジネスロジックやデータアクセスを担当します。
– **ビュー(View)**: ユーザーに

元記事を表示

Javaプログラミング入門:ステップ2 Webアプリケーションの基礎

# Javaプログラミング入門:ステップ2 Webアプリケーションの基礎

Webアプリケーションの開発において、Javaは強力なツールとなります。特にJSP(JavaServer Pages)とサーブレットは、動的なWebページを生成するための基本技術です。本記事では、Webアプリケーションの基礎を学ぶためのステップ2として、以下の内容を順を追って解説します。

1. JSPの基本的な使い方
2. サーブレットの基本
3. JSPとサーブレット間のデータのやり取り
4. フォームデータの送受信
5. JSPのカスタムタグ
6. 標準タグライブラリ(JSTL)
7. カスタムタグの作成と使用

## 1. JSPの基本的な使い方

JSPは、HTMLにJavaコードを埋め込んで動的なWebページを作成するための技術です。基本的なJSPファイルは`.jsp`拡張子を持ち、HTMLコードにJavaのスクリプトレットを挿入して動的なコンテンツを生成します。

### JSPの主な要素

– **スクリプトレット**: `<% ... %>` の中にJavaコードを記述します。
– **宣言*

元記事を表示

Javaプログラミング入門:ステップ1 基本知識の習得

# Javaプログラミング入門:ステップ1 基本知識の習得

Javaは、世界中で広く使われているオブジェクト指向プログラミング言語です。特に初学者にとっては、Javaの基本文法と概念を理解することが重要です。本記事では、Javaプログラミングの基礎を学ぶためのステップ1として、以下の内容を順を追って解説します。

1. 変数とデータ型
2. 制御構造(if文、forループ、whileループ)
3. クラスとオブジェクト
4. メソッド
5. 配列とコレクションフレームワーク(List, Set, Map)

## 1. 変数とデータ型

Javaでは、変数を宣言してデータを格納します。変数にはデータ型があり、格納できる値の種類が決まっています。主なデータ型は以下の通りです。

– `int`: 整数を表します。例: `int num = 10;`
– `double`: 小数点数を表します。例: `double price = 19.99;`
– `boolean`: 真偽値(trueまたはfalse)を表します。例: `boolean isTrue = true;`
– `char

元記事を表示

Spring 掲示板機能で、投稿時に作成日を表示させる方法 備忘録#1

## Spring 掲示板機能で、投稿時に作成日を表示させる方法

### 実行しようとした昨日
今回以下のように“作成日を、投稿と同時に自動的に付けてくれる機能“を実装しようとしました。
無事作成できたので、備忘録として投稿しようと思います。

![スクリーンショット 2024-06-03 22.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807467/5fd7fd26-6c18-eaeb-38fe-37b256f0a511.png)

### データベース設計

– schema.sql

“`
— テーブル削除
DROP TABLE IF EXISTS posts;

— カテゴリーテーブル
CREATE TABLE posts
(
id SERIAL PRIMARY KEY,
title TEXT,
content TEXT,
create_date DATE,
comments TEXT
);
“`

– Entity
Eniti

元記事を表示

Javaで「while文を使った繰り返し処理」の動作を確認してみた

# 概要

Javaで「while文を使った繰り返し処理」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/for/index6.html

# 実装

以下のファイルを作成しました。
“`JSample6_1.java
class JSample6_1{
public static void main(String[] args){
int num = 1;

while (num < 100){ System.out.println("num = " + num); num *= 2; } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample6_1.java $ java JSample6_1 num = 1 num = 2 num = 4 num = 8 num = 16 num = 32 num = 64 ``` # まとめ 何かの役に立てばと。

元記事を表示

美しくパフォーマンスの良いJavaの書き方(Javaのイディオムを学ぼう)

## なぜこの記事を書こうとしたのか?
どうも、ラクーンホールディングス(https://www.raccoon.ne.jp/) のシュウヤです。
私は普段Javaで開発をしていますが、美しくパフォーマンスの高い書き方を知らずに、保守性もパフォーマンスも悪いコードを書いていました。このままではいけないと思い、美しくパフォーマンスの高いコードの書き方を調べたところ、「イディオム」という概念にたどり着きました。イディオムとは、ソフトウェア工学におけるアルゴリズムやプログラミングのノウハウ、ティップス(tips)を集めたもので、要するにベストプラクティスに基づいてコードを書くためのヒントのようなものだそうです。これらをまとめることで、少しでも美しくパフォーマンスの良いJavaのコードが書けるのではないかと思いました。

## 目的
– 美しくパフォーマンスの良いJavaの書き方を学べる

## 目次
– Stringリテラルまたは既知のオブジェクトでequals()を呼び出す
– HashMapをループする際のentrySetの使用
– Enumをシングルトンとして使用
– Collecti

元記事を表示

OTHERカテゴリの最新記事