Web scope
ネットワークスキャン
スプリングはWeb環境でのみ動作し、プロトタイプとは異なりミラーの終了点まで管理されるため、終了方法が呼び出される.request:1つのHTTPリクエストがエントリおよび終了したときに保持される状態で、各HTTPリクエストは個別の空のインスタンスを作成および管理します. session:HTTP sessionと同じライフサイクルを持つスコップ アプリケーション:ServiceletContextと同じライフサイクルを持つScope Websocket:Webソケットと同じライフサイクルを持つスキャン Web環境の追加
Webscopeは、Web環境によって駆動されます.Web環境にライブラリを追加します. build.依存を勾配に追加
このライブラリを追加すると、スプリングガイドは内蔵のTomcatサーバを使用してWebサーバとともに実行されます. ポート番号競合
main/resources/application.次の設定をpropertiesに追加します.
複数のHTTPリクエストを同時に受信した場合、どのリクエストが残したログを正確に区別するのが難しい場合、request scopeを使用するのが望ましい.
request scopeを使用してログの例を残すログ形式:[UUID]「要求URL」{message} Unique UUIDを使用すると、HTTPリクエストを区別できます.また、リクエストのURL情報を追加して、リクエストがどのURLから来たかを判断することもできます. クラスが作成され、 @PostConstructを使用して、空の生成時にUUIDを作成して保存します. webscopeの空の場合、破棄メソッドも呼び出されるため、@Predestoryを使用して終了メッセージを保持します. requesturlはsetterメソッドを作成し、外部から入力できるようにします. Loggerは正常に動作しています. requestURL :
requestURLがLoggerに格納されている部分は、コントローラよりも汎用的な処理ができるSpring IntercepterやBrite Filterのようなところが望ましい!(例なので…)ビジネスロジックを持つサービス層の作成
request scopeではなく、これらすべての情報をパラメータでサービス層に渡すと、パラメータが多すぎて乱雑になり、requestURLのようにWebに関連する情報がWebに関係のないサービス層に移行します.Webに関連する部分ではコントローラしか使用できません.
保守の観点から、Webテクノロジーに依存することなく、サービス層は純粋に維持されなければならない. request scopeのLoggerでは、これらの部分をLoggerのメンバー変数に格納し、コードと階層をきれいに保つことができます.
まだエラーが発生しています!
すなわちSpringコンテナにrequest scope beanを要求し依存関係を注入しようとするが,HTTPリクエスト自体が来ないためrequest scopeの空は生成されない.(実際の顧客要求が来た場合にのみ空になります.)
スプリングコンテナに空の要求をする手順を、実際の顧客要求に遅らせる必要があります.
スプリングはWeb環境でのみ動作し、プロトタイプとは異なりミラーの終了点まで管理されるため、終了方法が呼び出される.
Webscopeは、Web環境によって駆動されます.Web環境にライブラリを追加します.
このライブラリを追加すると、スプリングガイドは内蔵のTomcatサーバを使用してWebサーバとともに実行されます.
implementation 'org.springframework.boot:spring-boot-starter-web'
main/resources/application.次の設定をpropertiesに追加します.
server.port=12345
リクエストスキャン複数のHTTPリクエストを同時に受信した場合、どのリクエストが残したログを正確に区別するのが難しい場合、request scopeを使用するのが望ましい.
request scopeを使用してログの例を残す
@Scope("request")
として指定されている場合、この空は各HTTPリクエストに1つ生成され、HTTPリクエストが完了すると消去されます. @Component
@Scope(value = "request")
public class Logger {...}
@PostConstruct
public void init() {
uuid = UUID.randomUUID().toString();
}
@PreDestory
public void close() {
System.out.println("close");
}
public void setRequestURL(String requestURL) {
this.requestURL = requestURL;
}
@Controller
@RequiredArgsConstructor
public class LogController{...}
HttpServletRequest
request URLを受信し、その値をLoggerに渡す.http://localhost:8080/log-demo
@RequestMapping("log-demo")
@ResponseBody
public String logDemo(HttpServletRequest request) {
String requestURL = request.getRequestURL().toString();
Logger.setRequestURL(requestURL);
...
}
リファレンスrequestURLがLoggerに格納されている部分は、コントローラよりも汎用的な処理ができるSpring IntercepterやBrite Filterのようなところが望ましい!(例なので…)
@Service
@RequiredArgsConstructor
public class LogService {...}
request scopeではなく、これらすべての情報をパラメータでサービス層に渡すと、パラメータが多すぎて乱雑になり、requestURLのようにWebに関連する情報がWebに関係のないサービス層に移行します.Webに関連する部分ではコントローラしか使用できません.
保守の観点から、Webテクノロジーに依存することなく、サービス層は純粋に維持されなければならない.
まだエラーが発生しています!
すなわちSpringコンテナにrequest scope beanを要求し依存関係を注入しようとするが,HTTPリクエスト自体が来ないためrequest scopeの空は生成されない.(実際の顧客要求が来た場合にのみ空になります.)
スプリングコンテナに空の要求をする手順を、実際の顧客要求に遅らせる必要があります.
Reference
この問題について(Web scope), 我々は、より多くの情報をここで見つけました https://velog.io/@mardi2020/Web-scopeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol