From 10980a90961c917d5453ad89e78ef5470fb7aaed Mon Sep 17 00:00:00 2001 From: Inohara Date: Sat, 25 Feb 2023 16:00:34 +0400 Subject: [PATCH] IoC --- .../configuration/SpeakerConfiguration.java | 21 +++++++++++++++++++ .../speaker/controller/SpeakerController.java | 20 ++++++++++++++++++ .../example/demo/speaker/domain/Speaker.java | 5 +++++ .../demo/speaker/domain/SpeakerDeu.java | 11 ++++++++++ .../demo/speaker/domain/SpeakerEng.java | 8 +++++++ .../demo/speaker/domain/SpeakerRus.java | 11 ++++++++++ .../demo/speaker/service/SpeakerService.java | 19 +++++++++++++++++ 7 files changed, 95 insertions(+) create mode 100644 demo/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java create mode 100644 demo/src/main/java/com/example/demo/speaker/controller/SpeakerController.java create mode 100644 demo/src/main/java/com/example/demo/speaker/domain/Speaker.java create mode 100644 demo/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java create mode 100644 demo/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java create mode 100644 demo/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java create mode 100644 demo/src/main/java/com/example/demo/speaker/service/SpeakerService.java diff --git a/demo/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java b/demo/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java new file mode 100644 index 0000000..b6a580c --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java @@ -0,0 +1,21 @@ +package com.example.demo.speaker.configuration; + +import com.example.demo.speaker.domain.Speaker; +import com.example.demo.speaker.domain.SpeakerEng; +import com.example.demo.speaker.domain.SpeakerRus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SpeakerConfiguration { + + @Bean(value = "ru") + public SpeakerRus createRusSpeaker(){ + return new SpeakerRus(); + } + + @Bean(value = "en") + public Speaker createEngSpeaker(){ + return new SpeakerEng(); + } +} diff --git a/demo/src/main/java/com/example/demo/speaker/controller/SpeakerController.java b/demo/src/main/java/com/example/demo/speaker/controller/SpeakerController.java new file mode 100644 index 0000000..440dd98 --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/controller/SpeakerController.java @@ -0,0 +1,20 @@ +package com.example.demo.speaker.controller; + +import com.example.demo.speaker.service.SpeakerService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class SpeakerController { + private final SpeakerService speakerService; + public SpeakerController(SpeakerService speakerService){ + this.speakerService = speakerService; + } + + @GetMapping("/hello") + public String hello(@RequestParam(defaultValue = "Привет") String name, + @RequestParam(defaultValue = "ru") String lang){ + return speakerService.say(name, lang); + } +} diff --git a/demo/src/main/java/com/example/demo/speaker/domain/Speaker.java b/demo/src/main/java/com/example/demo/speaker/domain/Speaker.java new file mode 100644 index 0000000..27a0a29 --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/domain/Speaker.java @@ -0,0 +1,5 @@ +package com.example.demo.speaker.domain; + +public interface Speaker { + String say(); +} diff --git a/demo/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java b/demo/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java new file mode 100644 index 0000000..71b92dc --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java @@ -0,0 +1,11 @@ +package com.example.demo.speaker.domain; + +import org.springframework.stereotype.Component; + +@Component(value = "de") +public class SpeakerDeu implements Speaker{ + @Override + public String say(){ + return "Hallo"; + } +} \ No newline at end of file diff --git a/demo/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java b/demo/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java new file mode 100644 index 0000000..6fb1670 --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java @@ -0,0 +1,8 @@ +package com.example.demo.speaker.domain; + +public class SpeakerEng implements Speaker{ + @Override + public String say() { + return "Hello"; + } +} diff --git a/demo/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java b/demo/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java new file mode 100644 index 0000000..2feae5c --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java @@ -0,0 +1,11 @@ +package com.example.demo.speaker.domain; + +import org.springframework.stereotype.Component; + +@Component(value = "ru") +public class SpeakerRus implements Speaker{ + @Override + public String say(){ + return "Привет"; + } +} diff --git a/demo/src/main/java/com/example/demo/speaker/service/SpeakerService.java b/demo/src/main/java/com/example/demo/speaker/service/SpeakerService.java new file mode 100644 index 0000000..3dbe1ee --- /dev/null +++ b/demo/src/main/java/com/example/demo/speaker/service/SpeakerService.java @@ -0,0 +1,19 @@ +package com.example.demo.speaker.service; + +import com.example.demo.speaker.domain.Speaker; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +@Service +public class SpeakerService { + private final ApplicationContext applicationContext; + + public SpeakerService(ApplicationContext applicationContext){ + this.applicationContext = applicationContext; + } + + public String say(String name, String lang){ + final Speaker speaker = (Speaker) applicationContext.getBean(lang); + return String.format("Hello %s %s!", speaker.say(), name); + } +}