- 1. 【これさえ読めばなんとなく違いがわかる】SpringBootの@〇〇Mappingとは?
- 2. 【 Javaで書いたソースコードが動作するまでの流れ 】
- 3. JEP 421: Deprecate Finalization for Removal
- 4. M1 Mac も速くないことがある
- 5. [IntelliJ IDEA] 静的セキュリティーチェックツール
- 6. Testcontainersでデータアクセスロジックのテストを行う方法
- 7. Springで自動生成されるBean名をFQCNに変更する方法
- 8. mybaits-spring-boot-starter-testの使い方
- 9. Spring + lombokでコンストラクタインジェクションする際にBean名を指定する方法
- 10. [Java] Spring Boot を導入する
- 11. ファイルの入力と出力のテストコード
- 12. JetpackComposeでJavaクラスを引数にとるとスマートコンポジションが効かない(1.1.0-rc03時点)
- 13. 並行処理時のFileAlreadyExistsException
- 14. 【Android】アプリのローカライズ(海外言語対応)する方法について
- 15. JavaFXでWindowsアプリを作るまでに学んだこと
- 16. 【AndroidStudio】 便利なAuto Import機能でimportの手間をなくす
- 17. SpringSecurityでログイン画面からログイン成功までの画面遷移の実装
- 18. JupyterにPython以外のカーネルを導入する
- 19. Javaで絶対値を求める
- 20. やっぱり難しい日付のカスタムフォーマット
【これさえ読めばなんとなく違いがわかる】SpringBootの@〇〇Mappingとは?
## 今回比較する@〇〇Mapping
1.RequestMapping
2.PostMapping
3.GetMapping
4.DeleteMapping
5.PutMapping## 使い分けるメリット
一目見てどんな処理をしているメソッドが判断できるため、可読性が上がる
例)Getであれば登録データの取得のメソッドetc…詳細は以下をチェック!
## 各@〇〇Mappingの使い方
### 1.RequestMapping
サイト全体の入り口部分。
例)Qiitaにアクセスする### 2.PostMapping
新しいデータを登録する役割を果たす。(**INSERT処理**)
例)Qiitaにユーザー登録する/Qiitaに記事を投稿するetc…### 3.GetMapping
登録されているデータを取得する役割を果たす。
例)Qiitaのトレンドから1件の記事を開くetc…### 4.DeleteMapping
登録されている値を削除する役割を果たす。
例)Qiitaからユーザーを削除する/Qiitaへの投稿を削除するetc…##
【 Javaで書いたソースコードが動作するまでの流れ 】
最近Javaの学習を始めて、まずは`Javaのソースコードで指示した通りの動作`が行われるまでの流れを確認しています。
## ざっくりとした3つの流れ
1.まず、`ソースコード`を書きます。ソースコードが書いてあるファイルを`ソースファイル`と呼び、拡張子は`「.java」`です。
2.次に、そのソースファイルを`コンパイラ`というソフトウェアで`クラスファイル`に`コンパイル`します。クラスファイル内には`バイトコード`という`1と0が複雑にならんでいるもの`が詰まっていて、このファイルの拡張子は`「.class」`になります。
3.最後に、バイトコードを`マシンコード(機械語)`に変換します。変換には`インタプリタ`という内部に`JVM`というしくみをもったソフトウェアを用い、バイトコードを少しずつ読みながら翻訳をしして`CPU`に送って処理を実行します。このようにして`Javaのソースコードで指示した通りの動作`は行われます。
## 各用語の解説
ソースファイルとは….ソースコードを書き込んだファイルのこと
ソースコードとは….人が読める状態のプログラムのこと
クラ
JEP 421: Deprecate Finalization for Removal
動向キャッチアップ出来てなかったので纏め。
https://openjdk.java.net/jeps/421
## 概要
* タイトル通り、Finalizationを廃止する為に前準備するJEP。
* Java 1.0から存在してるprotected void finalize()を廃止。
* Finalizationに対する指摘自体は1998年から挙がってた、とのこと。
* Finalizationの問題点は、JEP本文ご参照。
* 経緯も纏まっていて非常に勉強になった。
* JDK18時点ではデフォルト有効で変わらず。
* 移行先は、try-with-resources(Java7以降)および、Cleaners(Java9以降)を想定。## 今後(JEP421で整備する範囲)
* 以下などfinalize()メソッドをDeprecated勧告。
“`java
java.lang.Object.finalize()
java.lang.Enum.finalize()java.util.concurrent.ThreadPoolExec
M1 Mac も速くないことがある
# これは何?
先日まで Mid 2015 の 15 inch MacBook Pro (Core i7 クアッド / 2.2 GHz) を使っていた。
先日 MacBook Pro 14 inch (M1 非Max) を手に入れたんだけど、あんまり速くないなと思うことがあったので、今日も楽しいマイクロベンチマーク。# 計算内容
ruby で書くと短くていいね。
“`ruby:ruby
N=10000
r=(1..N).max_by{ |x| ((N-x)**x/7) % 6074001001 }
p r
“`
こういう内容。なんの意味もない。出力は
“`text
8663
“`となれば正解。
これを、go, java, c++ with boost (clang, gcc), ruby, python3, node で試した。
以降、グラフで出てくる “m1”, “rosetta”, “amd64” の意味は下表のとおり。
|記号|実行ハードウェア|バイナリ|
|:–|:–|:–|
|m1|MacBook Pro 14 inch (M1 非Ma
[IntelliJ IDEA] 静的セキュリティーチェックツール
# 概要
ここ記事は下記のgithubを参考し、作成しました。
[immomoのgithub](https://github.com/momosecurity/momo-code-sec-inspector-java)### immomoとは
静的javaコード、sqlコードをチェックし、セキュリティー上の問題が発見すると、エラーをを表示し、改修案を提示してくれるIntelliJ IDEAのプラグインです。
# requirement
下記によって、IntelliJ IDEAのバージョンは` >= 2018.3`>https://github.com/momosecurity/momo-code-sec-inspector-java#%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81
# インストール
プラグインマーケットで`immomo`を検索すれば良い。
> https://github.com/momosecurity/momo-code-sec-inspector-java#%E5%AE%89%E8%A3%85%E4%BD%BF%E7
Testcontainersでデータアクセスロジックのテストを行う方法
# はじめに
Testcontainersを使ってMySQLへのCRUDを行うデータアクセスロジックのテストコードを書いてみたので備忘録を残します。本記事内では抜粋したサンプルコードを掲載していますが、完全なソースコードは[GitHubリポジトリ](https://github.com/avenue68/repository-for-sharing/tree/master/qiita-797dab990acac61c94e9)で閲覧可能です。# Testcontainersとは
[公式リファレンス](https://www.testcontainers.org#about)では以下のように説明されています。>Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker
Springで自動生成されるBean名をFQCNに変更する方法
# はじめに
デフォルトBean名をFQCNにするための方法について解説します。すでに同様の内容を解説したページがいくつかありますが、独自の`BeanNameGenerator`実装クラスを定義する内容のものが多く、標準で用意されている`BeanNameGenerator`実装クラスを利用する例や複数の設定方法を網羅している解説は無かったため、備忘録として残しておきます。# 概要
SpringでアノテーションベースのBean定義を行う場合、特にBean名を明示しない限り、暗黙的に**Lower Camel Caseのクラス名**がBean名として与えられます。パッケージ名は無視されてしまうので、状況によってはBean名が重複し`ConflictingBeanDefinitionException`が発生してしまうことがあります。“`java
package com.example.demo.package1
@Service
public class UserService {
/* Bean名:userService */
}
package com.example.de
mybaits-spring-boot-starter-testの使い方
# はじめに
MyBatis-Spring-Boot-Starter-Testを使ってMapperクラスのテストコードを書いてみたので備忘録を残します。# 概要
Spring BootでMyBatisを使用しており、MyBatisにより自動生成されたMapperクラスのテストを行う場合は、SpringのDIコンテナを使ってテストを行う必要があります。しかし、単に`@SpringBootTest`アノテーション等でSpring Bootの機能を有効にするだけでは、Mapperクラスのテストに不要なAutoConfigureクラスが有効になったり、不要なBeanが生成されたりしてしまいます。
MyBatis-Spring-Boot-Starter-Testを使用することで、このような問題を回避できます。# 環境
– Java
– Junit5
– SpringBoot
– MyBatis
– Testcontainers
– Maven
– Windows10# 依存関係
MyBatis-Spring-Boot-Starter-Testを使用するためには、以下の依存関係を`
Spring + lombokでコンストラクタインジェクションする際にBean名を指定する方法
# はじめに
Lombokの`@AllArgsConstructor`アノテーションや`@RequiredArgsConstructor`アノテーションを使用してコンストラクタインジェクションを行う際に、Springの`@Qualifier`アノテーションでインジェクトするBean名を明示する方法について解説します。
すでに同様の内容を解説しているページがいくつかありますが、設定ファイルの配置位置や設定内容自体についての解説はあまり無く、追加で調べる必要があったので備忘録として残しておきます。# 概要
コンストラクタインジェクションでインジェクトするBean名を明示したい場合は、以下のようにコンストラクタの引数に`@Qualifier`アノテーションを付与する必要があります。“`java:MyController.java
@Controller
public class MyController {
private final MyService service;
public MyController(@Qualifier(“myServiceImpl”)MyServ
[Java] Spring Boot を導入する
##記事作成の目的
– これからjava学習をするにあたっての環境構築
– 初心者のため備忘録としてアウトプット
– 同じ所で詰まった人がいたときに参考にして頂くため## Spring Bootについて
Spring Bootとは、Javaのフレームワークの一つ。
Spring フレームワークというプロジェクトで出来ることは数多ありますが、環境構築等含め汎用的で使い勝手の良いものとして凝縮したものが「Spring Boot」です。今回は導入までをシンプルに記述するため、メリットに関しては以下記事等を参考にいただければと思います。
https://qiita.com/y_ogawa_naaaa/items/55ea48d4f163d8d7a241
https://camp.trainocate.co.jp/magazine/spring-boot/
## Spring Bootの導入
### 前提
– [eclipceのインストール](https://mergedoc.osdn.jp/)(Pleiades All in One からダウンロード)
まだの方は上記から
ファイルの入力と出力のテストコード
最近、ファイルを取り込み加工して出力する単純なプログラムを作成しましたが。作業期間が限られていたこともあり、必要最低限のテストコードしか整備できませんでした。。
**実装**
“`Java:App.java
public class App {
public static void main(String[] args) throws IOException {
String input_str = file_read();
input_str += “\n追記!”;
file_output(input_str);
}public static String file_read() throws IOException {
Path file = Paths.get(“src/main/resources/input/test.txt”);
return Files.readString(file, Charset.forName(“UTF-8”));
}
JetpackComposeでJavaクラスを引数にとるとスマートコンポジションが効かない(1.1.0-rc03時点)
# TLDR
## どういう現象が発生し得るか?
* Composable関数の入力値にJavaで書かれたクラスがある場合、スマートコンポジションが効かなくなってしまう場合があるようです。
つまり、__入力値が前回と今回で全く同じであったとしても、毎回再コンポジションが発生してしまうということ__です。## 回避するには
クラスに@Stable or @Immutableアノテーションを付与しましょう。* 公開プロパティが全て不変である場合は、@Immutalbeを付与しましょう。
* 公開プロパティの変更をComposable関数に通知したい場合(再コンポジションを発生させたい場合)は、@Stableを付与しましょう。__ただし、闇雲に上記アノテーションを付与すると、再コンポジションの仕組みがうまく行かない場合があるため、アノテーションを付与できる細かい条件は下記公式ドキュメントを参照して下さい!!__
https://developer.android.com/jetpack/compose/lifecycle?hl=ja#skipping# 詳細
## 前提
並行処理時のFileAlreadyExistsException
テスト中、起こらないはずが時たまエラーになって確認したもの
参照したサイト:
– how to resolve : https://stackoverflow.com/questions/16179102/files-createdirectory-filealreadyexistsexception
– java doc https://docs.oracle.com/javase/jp/7/api/java/nio/file/Files.html#createDirectory(java.nio.file.Path,%20java.nio.file.attribute.FileAttribute…)## 問題になるコード
“`java
if(!directory.exsits()){
Files.createDirectory(dir);
}
“`
## FileAlreadyExistsException原因→並行処理による
パスの存否によってパスを作成するように対応したはずなのに。。。!あ。。並行処理を見逃した。
たとえば、処理A、Bがあれば
A:check
【Android】アプリのローカライズ(海外言語対応)する方法について
# 海外言語の対応について
よく越境とかインバウンドとか聞きますが、ようするに海外言語に対応して表示する文字列を英語とかフランス語とかに対応させようって話で
Androidではどうやるのっていうのを記載します。# ユーザによる言語変更のイメージ
私のOPPO端末でのイメージ画像ですが、このように言語設定変えることを指しています。
![Screenshot_2022-01-30-17-45-56-94_png_と_Screenshot_2022-01-30-17-45-52-56_png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574173/3796c948-39c3-a2a6-dc0e-a44cf8ca6491.png)
# 開発側でどこを変更するのか
※公式を参考に説明しています。~~知っている風に書いててごめんなs~~
https://developer.android.com/guide/topics/resources/localization?hl=ja## Androi
JavaFXでWindowsアプリを作るまでに学んだこと
# GitHubリポジトリ
[customizable-clock](https://github.com/b150005/customizable-clock)
# JavaFXとは
Javaの**GUI開発フレームワーク**の1つで、`AWT`・`Swing`に比べ比較的新しく、`.fxml`ファイルで**GUIコンポーネントの配置を記述**できるという特徴がある。
環境構築や大まかな基本知識は[【超初心者向け】JavaFX超入門](https://qiita.com/tarosa0001/items/05ac653a091b7d1290f9)を参照。# GUIアプリケーションの実行スレッド
[JavaFX 1.2 非同期処理の概要](https://shuji-w6e.hatenadiary.org/entry/20090801/1249125921)
[JavaFXにおけるスレッドの扱い](http://krr.blog.shinobi.jp/javafx/javafx%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%B9%E3%
【AndroidStudio】 便利なAuto Import機能でimportの手間をなくす
# Unresolved reference: ○○
このようなエラーはAndroidStudioで開発しているとよく起きますね。
使いたいクラスや機能などをimportしてないことから起きています。解決方法としてはOption + Enterキーを押すかImportをの箇所をクリックするとimportコードが記載されて突破できます。
今回はその手間をなくす方法の紹介です。![スクリーンショット 2022-01-30 11.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574173/f2be6021-c83f-3d55-89ba-6b0011e7bcd6.png)
# Auto Import機能の追加方法
## Android Studio > Preferencesを開く
ここではAndroidStudioの環境設定をしています。
変えたいことのない設定は多くありますが、設定の変更はここで可能です。![スクリーンショット 2022-01-30 11.13.38.png](
SpringSecurityでログイン画面からログイン成功までの画面遷移の実装
#したいこと概要
1、「http://localhost:8080/myLogin」で、ログイン画面に行きます。
2、ログイン画面でユーザ名とパスワードを入力します。
3、ログインに成功したら、test.htmlに遷移します(test.htmlはやる気ないテキトーな画面なのでソース載せていません)
# 環境
Eclipse(Version: 2018-09 (4.9.0))
Spring Boot(バージョン2.5.2)
Java1.8#Spring Securityを使うための設定
ビルドツールがmavenの場合は、pom.xmlに下記を追加します。
“`xml:pom.xml
org.springframework.boot
spring-boot-starter-security
“`gradleの場合はbuild.gradleに下記を追記します。
“`g
JupyterにPython以外のカーネルを導入する
## この記事の前提条件
誰でも無料で利用できる、カスタマイズ可能な[Jupyter](https://jupyter.org/)であれば、自分が推している言語でカーネルを導入しない手は無いと思い、色々チャレンジしてみました。
ここでは以前投稿した下記の環境で話を進めていきます。https://qiita.com/Q-Lazy/items/bd7dacf1d8e865d57a94
## すでに利用可能な処理系のカーネルを導入
まずは、言語本体はすでに利用可能な状態で、カーネルさえインストールすればよいパターンから着手してみたいと思います。
####【Bashカーネル編】
手始めに容易に導入出来るBashから行います。こちらカーネルはPython3で実装されているので、pipコマンドでモジュールをインストール出来ます。
Jupyterへのカーネルのインストールも、Pythonモジュールの関数を実行するだけです。“`bash
$ pip3 install –user bash_kernel$ python3 -m bash_kernel.install
“`
後
Javaで絶対値を求める
## 1. 絶対値を求める
Math.absメソッドを使用します。“`java:
System.out.println(Math.abs(10));
System.out.println(Math.abs(-20));
System.out.println(Math.abs(-30.3));
System.out.println(Math.abs(0));
“`## 2. 実行結果
“`java:
10
20
30.3
0
“`## 3. 参考文献
– Java入門 absメソッド
やっぱり難しい日付のカスタムフォーマット
# はじめに
最近、たてつづけにAutomation360で日付の表示がうまくいかないという相談を受けました。例えば、2022/01/29という表示をしたいのにうまくいかないという現象です。
これは、Automation360に限った話ではありませんし、あちこちに書かれていますが、それでも間違ってしまう人が多いのです。
ネタの重複になるかもしれませんが、情報が目にふれる機会を増やす意味でここでも書いてみます。# 日付のカスタムフォーマット(大文字・小文字に注意)
先に書いた「2022/01/29という表示」をしたい場合は、yyyy/MM/ddです。
yyyyとddは小文字。
MMは大文字。yyyy/mm/ddやYYYY/MM/DDと書くとハマります。
![yyyymmdd2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632535/c1fe50da-0f36-4d42-a034-02a2ce874bfc.png)
# 大文字小文字ってどんな意味があるの?
これもあちこちに情報ありますが