diff --git a/spring-core/basic/build.gradle b/spring-core/basic/build.gradle index e77f0495..293f79e0 100644 --- a/spring-core/basic/build.gradle +++ b/spring-core/basic/build.gradle @@ -14,6 +14,7 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'javax.inject:javax.inject:1' compileOnly 'org.projectlombok:lombok' diff --git a/spring-core/basic/src/main/java/com/example/basic/common/MyLogger.java b/spring-core/basic/src/main/java/com/example/basic/common/MyLogger.java new file mode 100644 index 00000000..fa7e8fe5 --- /dev/null +++ b/spring-core/basic/src/main/java/com/example/basic/common/MyLogger.java @@ -0,0 +1,36 @@ +package com.example.basic.common; + +import org.springframework.context.annotation.Scope; +import org.springframework.context.annotation.ScopedProxyMode; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.UUID; + +@Component +@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) +public class MyLogger { + + private String uuid; + private String requestURL; + + public void setRequestURL(String requestURL) { + this.requestURL = requestURL; + } + + public void log(String message) { + System.out.println("[" + uuid + "] " + "[" + requestURL + "] " + message); + } + + @PostConstruct + public void init() { + uuid = UUID.randomUUID().toString(); + System.out.println("[" + uuid + "] request scope bean create: " + this); + } + + @PreDestroy + public void close() { + System.out.println("[" + uuid + "] request scope bean close: " + this); + } +} diff --git a/spring-core/basic/src/main/java/com/example/basic/web/LogDemoController.java b/spring-core/basic/src/main/java/com/example/basic/web/LogDemoController.java new file mode 100644 index 00000000..8c65ad90 --- /dev/null +++ b/spring-core/basic/src/main/java/com/example/basic/web/LogDemoController.java @@ -0,0 +1,32 @@ +package com.example.basic.web; + +import com.example.basic.common.MyLogger; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +@Controller +@RequiredArgsConstructor +public class LogDemoController { + + private final LogDemoService logDemoService; +// private final ObjectProvider myLoggerProvider; + private final MyLogger myLogger; + + @RequestMapping("log-demo") + @ResponseBody + public String logDemo(HttpServletRequest request) { + String requestURL = request.getRequestURL().toString(); +// MyLogger myLogger = myLoggerProvider.getObject(); + myLogger.setRequestURL(requestURL); + + myLogger.log("controller test"); + logDemoService.logic("testId"); + + return "OK"; + } +} diff --git a/spring-core/basic/src/main/java/com/example/basic/web/LogDemoService.java b/spring-core/basic/src/main/java/com/example/basic/web/LogDemoService.java new file mode 100644 index 00000000..3ce9bd41 --- /dev/null +++ b/spring-core/basic/src/main/java/com/example/basic/web/LogDemoService.java @@ -0,0 +1,19 @@ +package com.example.basic.web; + +import com.example.basic.common.MyLogger; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class LogDemoService { + +// private final ObjectProvider myLoggerProvider; + private final MyLogger myLogger; + + public void logic(String id) { +// MyLogger myLogger = myLoggerProvider.getObject(); + myLogger.log("service id = " + id); + } +}