- 1. Spring ContainerにSpring Beanを手動で登録する方法(@Bean)
- 2. WebClientを用いての外部APIの呼び出し方
- 3. javaガベージ・コレクタとOutOfMemoryError
- 4. Java仮想マシンのメモリー
- 5. 「Hello World」を出力するコードが分からない4年目エンジニア
- 6. javaのstackoverflowerrorとスタックサイズ
- 7. demo
- 8. Control
- 9. Java|Stringクラスのメソッドの使い方(Ⅱ)
- 10. Java|Stringクラスのメソッドの使い方(Ⅰ)
- 11. SpringBootプロジェクトでテスト実行時にUnsatisfiedDependencyException
- 12. データベースを検索した結果の件数でHTMLを切り替える方法
- 13. JUnitで学ぶユニットテストの実践的で本質的な考え方
- 14. Javaってオワコン??ーJavaでご飯を食べていけるようになりたいエンジニア
- 15. FizzBuzzEnterpriseEditionが何をやっているのか超ざっくりと
- 16. プログラミング初心者が初めてJava(基礎)を触った感想とざっくりまとめ。
- 17. Java: `serialVersionUID`について
- 18. JavaSilverの試験で多分問われない演算子の話③
- 19. Java基礎まとめ(データベース)
- 20. devContainerでNext(React)+SpringBoot(Java)の開発環境を作成する BackEnd編
Spring ContainerにSpring Beanを手動で登録する方法(@Bean)
1. AppConfig.javaに @Configuration, @Bean annotationをつける。
“`jsx
package hello.hellospring;@Configuration
public class AppConfig {@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}@Bean
public MemberRepository member
WebClientを用いての外部APIの呼び出し方
Java SpringBoot内でのWebClientを用いての外部APIの呼び出し方
※共通は各通信の場合で呼ばれているメソッド
(共通)
“`java:WebClientInfo.java
public WebClient webClient;public WebClientInfo(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl(“http://localhost:8082”).build();
}
“`## (GET通信の場合) ※クエリパラメータ方式の場合
“`java:WebClientInfo.javapublic 【戻りの型】 メソッド名(値1, 値2) {
return this.webClient.get()
.uri(uriBuilder -> uriBuilder
.path(“/【UR
javaガベージ・コレクタとOutOfMemoryError
## ヒープ領域とは
JVMがプログラム実行時に確保するメモリ領域のうち、実行時に生成するオブジェクトのために割り当てられる領域をヒープ領域といいます。
## ガベージ・コレクタとは
ガベージ・コレクタ(GC)は、アプリケーションの動的メモリー割当てリクエストを自動的に管理します。
Java HotSpotガベージ・コレクションでは、様々な技術を採用して、これらの操作の効率性を改善します。
– 世代別のスカベンジをエージングとともに使用して、再利用可能で大きなメモリー領域が含まれている可能性のあるヒープ内の領域に集中します。
– 複数のスレッドを使用して、並列操作をアグレッシブに実行するか、アプリケーションと同時にバックグラウンドで長時間かかる操作を実行します。
– ライブ・オブジェクトを圧縮することで、連続的な大きな空きメモリーのリカバリを試行します。
## OutOfMemoryError
メモリー不足のためにJava Virtual Machineがオブジェクトを割り当てることができず、ガベージ・コレクタによっても使用可能なメモリーをこれ以上確保できない場合にスローされます。まる
Java仮想マシンのメモリー
## Runtime
JavaアプリケーションはすべてRuntimeクラスの単一のインスタンスを持ちます。このクラスは、アプリケーションとアプリケーション実行環境とのインタフェースになります。現在のRuntimeオブジェクトは、getRuntimeメソッドにより取得できます。
– public long totalMemory()
Java仮想マシンのメモリーの総容量を返します。ホストの環境によっては、このメソッドによって返される値が時間とともに変化する場合があります。
任意の指定された型のオブジェクトを格納するのに必要なメモリー容量は、実装によって異なります。
戻り値:
現在および将来のオブジェクトに利用可能な現在のメモリーの総容量(バイト単位)。
– public long maxMemory()
Java仮想マシンが使用を試みる最大メモリー容量を返します。固有の制限が存在しない場合、値Long.MAX_VALUEが返されます。
戻り値:
仮想マシンが使用を試みる最大メモリー容量(単位はバイト)
## ソースコードで確認
“`java
public class HeapTest
「Hello World」を出力するコードが分からない4年目エンジニア
エンジニア4年目にしてJavaをまともに勉強したことのない筆者です。
自社開発でJavaを使うことになったので勉強していますが、さっそく壁にぶつかったのでまとめてみました!# 1.「Hello World」出力じゃ!!
PHPでHello World出力しよーっと
うん!見てわかるぞ!以前PHPを使った仕事してたからね!
↓“`php:php
“`次はJavaだ!
“`java:java
public class Main {
public static void main(String[] args) {
System.out.println(“Hello World”);
}
}
“`いやいやいや長いて。
書いてあることからよくわからんし。
System~~~~の部分で出力するのは分かるけども。初めてみるJavaのコードは呪文だったのでひとつ
javaのstackoverflowerrorとスタックサイズ
## javaのstackoverflowerror
アプリケーションでの再帰の回数が多すぎてスタックオーバーフローが起こる場合に、StackOverflowErrorがスローされます。
“`java
public class StackOverFlowTest {
private static int count = 1;
public static void main(String[] args) {System.out.println(count);
count++;
main(args);}
}
“`
スタック・サイズを200kに指定して実施します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3184769/4aeb26e7-a673-99a4-de53-3f6d72e50b60.png)“`
2452
2453
2454
2455
Exception in thread “main” java.lang.StackOver
demo
“`java:demo.java
@RequestMapping(value = “/user/create”, method = RequestMethod.POST)
public String create(@Validated @ModelAttribute UserRequest userRequest, BindingResult result, Model model) {
if (result.hasErrors()) {
ListaccountNameErrors = new ArrayList<>();
ListloginIdErrors = new ArrayList<>();
ListpasswordErrors = new ArrayList<>(); for (ObjectError error : result.getAllErrors()) {
String defaultMessage = Obj
Control
“`java:Control.java
@RequestMapping(value = “/user/create”, method = RequestMethod.POST)
public String create(@Validated @ModelAttribute UserRequest userRequest, BindingResult result, Model model) {
if (result.hasErrors()) {
ListerrorList = new ArrayList<>();
for (ObjectError error : result.getAllErrors()) {
String defaultMessage = Objects.requireNonNull(error.getDefaultMessage());
String errorMessage = messageSou
Java|Stringクラスのメソッドの使い方(Ⅱ)
# 文字列を扱うメソッド
### valueOf()
– 書き方:String.valueOf(boolean b / char c / char[] c / int i / long l / float f / double b / Object o)
– 戻り値:Stringvalue Ofメソッドは、様々なタイプの値をString型に変換してくれます。データ型が厳しく分かれているJavaでその値を扱うためにデータ型を統一することも重要なことです。このメソッドを利用すると、どのデータ型でもString型に変え、値を扱うことができるようになります。
int型の場合はStringに変換して文字列として「+」演算をしたり、オブジェクトのインスタンスの場合はStringに変換してそのインスタントのアドレス値を返すこともできます。
“`
public class Main{
public static void main(String[] args){
int intValue=30;
char chrArrayValue[]={‘H’,’e
Java|Stringクラスのメソッドの使い方(Ⅰ)
# はじめに
JavaのStringクラスには文字列を扱うためのメソッドが入っています。今回はそのメソッドについて紹介しようと思います。# 文字列を扱うメソッド
### replace()
– 書き方:str.replace(char searchChar, char newChar)
– 戻り値:Stringreplaceメソッドは、文字列を別の文字または文字列に置き換えるために使われます。最初の引数に置き換え元の文字を指定し、2番目の引数に置き換える文字を指定します。
“`
public class Main{
public static void main(String[] args){
String myStr = “aaaa”;
System.out.println(myStr.replace(“aa”, “b”)); // bb
}
}
“`### charAt()
– 書き方:str.charAt(int index)
– 戻り値:charcharAtメソッドは、文字列から引数で指定された位置(index)にある文字を抽出して返します。
SpringBootプロジェクトでテスト実行時にUnsatisfiedDependencyException
## 最初に結論
適切に`@ComponentScan`しよう。## 前提
以下のように3階層のモジュールがあり、
main-module -> sub-module -> util-module という依存関係であるとする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541075/41302ebc-bd7f-7848-7d8b-fca258769a23.png)このような構成で、sub-module内の`@SpringBootTest`が付与されたテストを実行した際
`org.springframework.beans.factory.UnsatisfiedDependencyException`が発生してハマったので備忘でメモ。## 原因
sub-module内の特定の`@Bean`がutil-module内の特定の`@Bean`に依存していたが、
コンポーネントスキャンの設定がデフォルトのままとなっており、
util-module内までスキャンしにいかなかったことが
データベースを検索した結果の件数でHTMLを切り替える方法
# はじめに
データベースの検索結果がある場合と無い場合(0件)でHTMLを切り替えたいなーと思い、
検索結果の件数によってHTMLを切り替える方法を調べました。# HTMLを切り替える方法
JAVA Spring BootとThymeleafを使用してpageableから要素数を取得することでHTMLタグを切り替えられそう。
という事で、.getNumberOfElements() メソッドを使用して検索結果の件数を取得してHTMLタグを切り替えてみました。# コード抜粋
“`html:index.html
要素なし
“`
“`java:Controller.java
packa
JUnitで学ぶユニットテストの実践的で本質的な考え方
# 初めに
具体的なコードや方法も記述しますが、それよりも JUnit などの自動テストのFW、ユニットテストの概念や目的など本質的なことを把握し理解する事を主題にしてます。
また、参考資料欄にあるように、様々なものを参考に網羅的にまとめています。非常にボリュームがるので興味あるところだけ読んでもらう方が良いかもしれません。
こちらでは、ある程度開発経験(1〜2年程度)があり、自動テストについて少しでも触れた事があるくらいの方が対象になる記事です。自分がそうだからです。ただし、コンパイルエラーにならないだけの書き方では意味がないのでそういった構文やお作法のようなものの話は少ししかしません。なぜそのようなお作法になったのか?そうである理由は何なのか?トレードオフは?といった、本質的な部分にフォーカスを当てていきたいと思います。
# 1. 概要
JUnit は Java 言語向けのユニットテストフレームワークです。
1997年に、Smalltalk のためのユニットテストのフレームワークであるSUnitをもとにして、エーリヒ・ガンマと、SUnitの開発者のケント・ベックが中心と
Javaってオワコン??ーJavaでご飯を食べていけるようになりたいエンジニア
# Javaを覚えれば食べていけると言われて
自分が学生の頃にC言語をやりつつ、先生にはこれからはJava時代だ!!
Javaを覚えれば食うに困る事態にはならない!! と言われてはや数十年……
現在はプログラミングの「Vivienne Westwood」いや「焚き火台」かな
はたまた「マリオカート」的な……例えがわからなくなってきましたが、最先端!!!! という形ではないものの、常に前線にいる存在。
そんな形でさまざまなシステムが今日もJavaで動いております。
でも、ここ最近Javaってオワコン???? という話を聞くこともちらほら……
(まぁ、有償化のときが一番ひやっとしましたが……)そんなJavaの将来についてどうなんだ? と見ていきたいと思います。
# そもそもJavaでできることって??
Javaって色々言われているけど、現状どんな特徴あるっけ? 何が作れる? をまとめてみよう!* Javaの特徴
1. オブジェクト指向
オブジェクティブ指向言語の筆頭に数えられるJava。そこは今も昔も変わっていません。
FizzBuzzEnterpriseEditionが何をやっているのか超ざっくりと
## FizzBuzzEnterpriseEdition
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
## 大体こんな感じ(多分)
実際はFactoryだとかがあったり(水増し用の)クラス、インターフェースが大量に作られているのでかなりカオス
“`java
import java.util.ArrayList;
import java.util.List;interface IsEvenlyDivisibleStrategy {
boolean isEvenlyDivisible(int i);
}class FizzStrategy implements IsEvenlyDivisibleStrategy {
public boolean isEvenlyDivisible(int i) {
return i % 3 == 0;
}
}class BuzzStrategy implements IsEvenlyDivisible
プログラミング初心者が初めてJava(基礎)を触った感想とざっくりまとめ。
# はじめに
気になっていたJavaを教材を通して初めて触ったのでそのまとめと感想を共有します。初心者なので間違った説明や一般的ではない手順が含まれている可能性があります。
いくつかのところでRubyとの比較をしていますが、比較できるところを全てを取り上げているわけではありません(今の自分じゃ荷が重いです)。
分からなかった部分は自分で調べていたりします。
初心者が学んだことをノートにまとめているんだなーくらいの認識だとありがたいです。# 環境
– Windows11
– AdoptOpenJDK
– vscode# Javaの開発案件はRubyとどう違うか
## Ruby on Railsの特徴
Ruby on Railsは、小規模の組織で好まれるフレームワーク。
– 特徴
短期間でプロダクトをリリースできること
言語習得のための学習コストが低いこと
## Javaの特徴
Javaは、大手企業の基幹システムなど大規模開発に適した言語。
– 特徴
アプリケーションの仕様変更を行いやすいこと
セキュリティが強固であること
長期間にわたる保守・運用がしやす
Java: `serialVersionUID`について
# Java: `serialVersionUID`について
Javaのオブジェクトシリアライゼーションは、オブジェクトの状態をバイトストリームに変換し、ネットワークを介して送信したり、ディスクに保存したりするプロセスです。このプロセスは、`Serializable`インターフェイスを実装することでオブジェクトに対して有効になります。`serialVersionUID`は、シリアライズプロセスの中で重要な役割を果たします。この記事では、`serialVersionUID`の重要性、その使い方、および指定しない場合のデメリットについて詳しく解説します。
## `serialVersionUID`とは?
`serialVersionUID`は、シリアライズ可能なクラスの固有のバージョン番号です。このUIDは、シリアライズされたオブジェクトと対応するクラスの互換性を検証するために使用されます。異なる`serialVersionUID`を持つクラスとオブジェクト間でのデシリアライズは、`InvalidClassException`を引き起こす可能性があります。
### `serialV
JavaSilverの試験で多分問われない演算子の話③
# はじめに
前回の記事https://qiita.com/hiroki1994/items/466e8a8fd88d3d73bcb2
に続き本記事では「&=,|=,^=,<<=,>>=,>>>=」といった代入演算子について紹介します。
本記事は第一弾の下記の記事の知識があれば、**左辺と右辺で演算した結果を左辺に代入する** というポイントさえ覚えていただければ問題ないです。https://qiita.com/hiroki1994/items/ab95ecdaf3a20cac9615
# 「&=,|=,^=,<<=,>>=,>>>=」
### ①「&=」
左辺と右辺で**論理積(AND)** を取った値を **左辺の変数に代入します**。
では「a &= b」で考えていきましょう。
これは **「a = a & b」** と同じ意味です。
a=1100、b=0101の場合下記の図のように、
論理積なのでab両方1の桁は1に。
それ以外の桁は、両方0もしくは片方が0なので0になります。上記の**a & bの結果**を**変数aに代入**します。
|
Java基礎まとめ(データベース)
# はじめに
Javaの学習を始めました。
こんなレベルから・・・?というくらい超基礎~から執筆します。
自身が復習できるような自身の備忘録を作成していきます。# データベース接続の仕組み
### データベース(DB)
データを整理・蓄積したもの。DBとも呼ぶ。
Dataは資料。基礎事実。実験、観測、調査、統計学的に処理したりして得た数値情報。
baseは「基地」という意味があり、直訳すると「情報の基地」のようなものデータを管理してくれるソフトウェアのこと。
そしていろいろな種類があり、どのDBを利用するかを決定した上で開発をすすめる。* Oracle
* MySQLなどいろいろなDBソフトウェアがある。
### JDBC
Java DataBase Connectivityの略
Javaとデータベースをつなげる役割をするもの(クラスやインターフェイスの集まり)* JDBC API
APIとはプログラムやサービスの機能を外部から使えるようにする仕組みや利用方法
JDKに含まれるパッケージなので、一般的なJava環境
devContainerでNext(React)+SpringBoot(Java)の開発環境を作成する BackEnd編
Next+springBootの開発環境構築2部作のBackEnd編になります。
FrontEndについては[こちら](https://qiita.com/ede/items/e1259f005af47be9ffe2)。## 構成
– SDKMAN
– SpringBoot
– gradle
– Java
– mySQL# 手順
## DevContainerを作成
– 1.VScodeを起動する
適当なフォルダーを作成して、そのフォルダー配下でVSCodeを起動する。
“`
~$ mkdir sample-project-backend
~$ cd sample-project-backendsample-project-backend$ code .
“`
– 2.VSCodeのコントロールパネル(`ctrl + shift + P`)から、`「Dev containers:Add Dev Containers Configuration Files…」`を選択す
– 3.`「Java」`を選択
– 4.「Java」のバージョンを選択(17)。
– 5.CL