diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/pom.xml b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/pom.xml new file mode 100644 index 00000000..658e2b51 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + + ru.otus + application + 0.0.1-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-parent + 2.3.3.RELEASE + + + + UTF-8 + 11 + 11 + + 3.0.0-M3 + 3.3.9 + + 0.0.1-SNAPSHOT + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-actuator + + + + ru.otus + messager-starter + ${messager-starter.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + + + + maven-enforcer-plugin + ${maven-enforcer-plugin.version} + + + enforce-maven + + enforce + + + + + + ${minimal.maven.version} + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/Demo.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/Demo.java new file mode 100644 index 00000000..610b4169 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/Demo.java @@ -0,0 +1,17 @@ +package ru.otus.mainpackage; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import ru.otus.mainpackage.configs.YamlProps; + +//http://localhost:8080/actuator/health + +@SpringBootApplication +@EnableConfigurationProperties(YamlProps.class) +public class Demo { + + public static void main(String[] args) { + SpringApplication.run(Demo.class, args); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/configs/Localization.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/configs/Localization.java new file mode 100644 index 00000000..9ac25c3d --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/configs/Localization.java @@ -0,0 +1,17 @@ +package ru.otus.mainpackage.configs; + +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; + +@Configuration +public class Localization { + @Bean + public MessageSource messageSource() { + var ms = new ReloadableResourceBundleMessageSource(); + ms.setBasename("classpath:/il8n/bundle"); + ms.setDefaultEncoding("UTF-8"); + return ms; + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/configs/YamlProps.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/configs/YamlProps.java new file mode 100644 index 00000000..e491793b --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/configs/YamlProps.java @@ -0,0 +1,28 @@ +package ru.otus.mainpackage.configs; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.Locale; + +@ConfigurationProperties(prefix = "application") +public class YamlProps { + + private String message; + private Locale locale; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Locale getLocale() { + return locale; + } + + public void setLocale(Locale locale) { + this.locale = locale; + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/Greeting.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/Greeting.java new file mode 100644 index 00000000..a8c5db1b --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/Greeting.java @@ -0,0 +1,7 @@ +package ru.otus.mainpackage.welcome; + +import java.util.Map; + +public interface Greeting { + Map sayHello(String name); +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingController.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingController.java new file mode 100644 index 00000000..0610eab6 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingController.java @@ -0,0 +1,29 @@ +package ru.otus.mainpackage.welcome; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ru.otus.mainpackage.configs.YamlProps; + + +import java.util.Map; + +@RestController +public class GreetingController { + private static final Logger logger = LoggerFactory.getLogger(GreetingController.class); + private final Greeting greeting; + + public GreetingController(Greeting greeting, YamlProps props) { + this.greeting = greeting; + logger.info("ATTENTION! props.getMessage(): {}", props.getMessage()); + } + + //http://localhost:8080/hello?name=ddd + @GetMapping("/hello") + public Map sayHello(@RequestParam(name="name") String name) { + return this.greeting.sayHello(name); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingControllerRstyle.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingControllerRstyle.java new file mode 100644 index 00000000..6ccf2ffb --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingControllerRstyle.java @@ -0,0 +1,27 @@ +package ru.otus.mainpackage.welcome; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +public class GreetingControllerRstyle { + private static final Logger logger = LoggerFactory.getLogger(GreetingControllerRstyle.class); + + private final Greeting greeting; + + public GreetingControllerRstyle(Greeting greeting) { + logger.info("Я НАСТОЯЩИЙ БИН!!!"); + this.greeting = greeting; + } + + //http://localhost:8080/hello/jone + @GetMapping(value="/hello/{name}") + public Map sayHello(@PathVariable("name") String name) { + return this.greeting.sayHello(name); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingService.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingService.java new file mode 100644 index 00000000..b563310a --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/GreetingService.java @@ -0,0 +1,17 @@ +package ru.otus.mainpackage.welcome; + +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class GreetingService implements Greeting { + + @Override + public Map sayHello(String name) { + Map map = new HashMap<>(); + map.put(name, "Hello, " + name); + return map; + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/LocalHello.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/LocalHello.java new file mode 100644 index 00000000..d265f8b9 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/welcome/LocalHello.java @@ -0,0 +1,29 @@ +package ru.otus.mainpackage.welcome; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Component; +import ru.otus.mainpackage.configs.YamlProps; + +import javax.annotation.PostConstruct; + +@Component +public class LocalHello { + private static final Logger logger = LoggerFactory.getLogger(LocalHello.class); + + private final MessageSource messageSource; + private final YamlProps props; + + public LocalHello(MessageSource messageSource, YamlProps props) { + this.messageSource = messageSource; + this.props = props; + } + + //!!! Вообще, PostConstruct - это плохая практика !!! + @PostConstruct + public void printHello() { + var message = messageSource.getMessage("hello.user", new String[]{"Ivan"}, props.getLocale()); + logger.info("Localization:{}", message); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/сommandlinerunners/PreparationDev.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/сommandlinerunners/PreparationDev.java new file mode 100644 index 00000000..88e908f3 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/ru/otus/mainpackage/сommandlinerunners/PreparationDev.java @@ -0,0 +1,28 @@ +package ru.otus.mainpackage.сommandlinerunners; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; +import ru.otus.Messager; + +import java.util.Arrays; + + +@Component +public class PreparationDev implements CommandLineRunner { + private static final Logger logger = LoggerFactory.getLogger(PreparationDev.class); + + private final Messager messager; + + public PreparationDev(Messager messager) { + this.messager = messager; + } + + @Override + public void run(String... args) { + logger.info("DEV mode!!! Что-то настравиваем и подготавливаем, параметры: {} ", Arrays.toString(args)); + logger.info("message from Messager:{}", messager.sayMessage()); + //args парметры, котрые могут быть переданы в Main + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/wrongPackage/PreparationUnKnown.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/wrongPackage/PreparationUnKnown.java new file mode 100644 index 00000000..4900dfb6 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/java/wrongPackage/PreparationUnKnown.java @@ -0,0 +1,17 @@ +package wrongPackage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +//Этот компонент не будет найден, т.к. нарушена иерархия пакетов +@Component +public class PreparationUnKnown implements CommandLineRunner { + private static final Logger logger = LoggerFactory.getLogger(PreparationUnKnown.class); + + @Override + public void run(String... args) throws Exception { + logger.info("Это не увидим никогда"); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/application.yml b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/application.yml new file mode 100644 index 00000000..f2e30c2c --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/application.yml @@ -0,0 +1,15 @@ +server: + port: 8080 + +management: + endpoints: + web: + exposure: + include: info, health, beans + +application: + message: "Test Props msg" + locale: ru_RU + +messager: + message: "Hello from Messager" \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/il8n/bundle_en.properties b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/il8n/bundle_en.properties new file mode 100644 index 00000000..e3bada4f --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/il8n/bundle_en.properties @@ -0,0 +1 @@ +hello.user="Hello, {0}"! \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/il8n/bundle_ru_RU.properties b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/il8n/bundle_ru_RU.properties new file mode 100644 index 00000000..20439324 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/il8n/bundle_ru_RU.properties @@ -0,0 +1 @@ +hello.user="Привет, {0}"! diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/logback.xml b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/logback.xml new file mode 100644 index 00000000..6fb07ce3 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/test/java/ru/otus/mainpackage/welcome/GreetingControllerTest.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/test/java/ru/otus/mainpackage/welcome/GreetingControllerTest.java new file mode 100644 index 00000000..73d586a5 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/application/src/test/java/ru/otus/mainpackage/welcome/GreetingControllerTest.java @@ -0,0 +1,62 @@ +package ru.otus.mainpackage.welcome; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.web.servlet.MockMvc; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; + + +@WebMvcTest({GreetingController.class, GreetingControllerRstyle.class}) +public class GreetingControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private Greeting greeting; + + @Test + public void sayHelloTest() throws Exception { + String name = "Mr.Test"; + Map map = new HashMap<>(); + map.put(name, "Hello, " + name); + String expectedResult = "{\"Mr.Test\":\"Hello, Mr.Test\"}"; + + when(greeting.sayHello(name)).thenReturn(map); + MockHttpServletResponse result = mockMvc.perform(get(String.format("/hello?name=%s", name))) + .andReturn() + .getResponse(); + + verify(greeting, times(1)).sayHello(name); + System.out.println(); + assertThat(result.getContentAsString()).isEqualTo(expectedResult); + } + + @Test + public void sayHelloTestMock() throws Exception { + String name = "Mr.Test"; + Map map = new HashMap<>(); + map.put(name, "Hello, " + name); + String expectedResult = "{\"Mr.Test\":\"Hello, Mr.Test\"}"; + + when(greeting.sayHello(name)).thenReturn(map); + MockHttpServletResponse result = mockMvc.perform(get(String.format("/hello/%s", name))) + .andReturn() + .getResponse(); + + verify(greeting, times(1)).sayHello(name); + System.out.println(); + assertThat(result.getContentAsString()).isEqualTo(expectedResult); + } +} \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/pom.xml b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/pom.xml new file mode 100644 index 00000000..354f87eb --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + ru.otus + messager-starter + 0.0.1-SNAPSHOT + + + UTF-8 + 11 + 11 + + 3.0.0-M3 + 3.3.9 + + 3.2.1 + + 2.3.3.RELEASE + 0.0.1-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter + ${spring-boot-starter.version} + + + org.slf4j + jul-to-slf4j + + + + + + ru.otus + messager + ${messager.version} + + + + + + + + maven-enforcer-plugin + ${maven-enforcer-plugin.version} + + + enforce-maven + + enforce + + + + + + ${minimal.maven.version} + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + ${maven-shade-plugin.version} + + + + \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/java/ru/otus/MessagerAutoConfiguration.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/java/ru/otus/MessagerAutoConfiguration.java new file mode 100644 index 00000000..561b0b46 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/java/ru/otus/MessagerAutoConfiguration.java @@ -0,0 +1,38 @@ +package ru.otus; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +@ConditionalOnClass(Messager.class) +@EnableConfigurationProperties(Props.class) +public class MessagerAutoConfiguration { + private static final Logger logger = LoggerFactory.getLogger(MessagerAutoConfiguration.class); + + private final Props props; + + public MessagerAutoConfiguration(Props props) { + this.props = props; + } + + @Bean + @ConditionalOnMissingBean + public MessagerConfig messagerConfig() { + String message = props.getMessage() == null ? "default message" : props.getMessage(); + logger.info("AutoConfig. creating MessagerConfig, default message:{}", message); + return new MessagerConfig(message); + } + + @Bean + @ConditionalOnMissingBean + public Messager messager(MessagerConfig messagerConfig) { + logger.info("AutoConfig. creating Messager"); + return new Messager(messagerConfig); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/java/ru/otus/Props.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/java/ru/otus/Props.java new file mode 100644 index 00000000..12de712a --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/java/ru/otus/Props.java @@ -0,0 +1,17 @@ +package ru.otus; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix="messager") +public class Props { + + private String message; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/resources/META-INF/spring.factories b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..a1076bcb --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + ru.otus.MessagerAutoConfiguration \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/pom.xml b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/pom.xml new file mode 100644 index 00000000..bc328100 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + ru.otus + messager + 0.0.1-SNAPSHOT + + + UTF-8 + 11 + 11 + + 3.0.0-M3 + 3.3.9 + + 3.2.1 + + + + + + maven-enforcer-plugin + ${maven-enforcer-plugin.version} + + + enforce-maven + + enforce + + + + + + ${minimal.maven.version} + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + ${maven-shade-plugin.version} + + + + \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/src/main/java/ru/otus/Messager.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/src/main/java/ru/otus/Messager.java new file mode 100644 index 00000000..acea0270 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/src/main/java/ru/otus/Messager.java @@ -0,0 +1,13 @@ +package ru.otus; + +public class Messager { + private final MessagerConfig config; + + public Messager(MessagerConfig config) { + this.config = config; + } + + public String sayMessage() { + return config.getMessage(); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/src/main/java/ru/otus/MessagerConfig.java b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/src/main/java/ru/otus/MessagerConfig.java new file mode 100644 index 00000000..2405d3ea --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-demo/messager/src/main/java/ru/otus/MessagerConfig.java @@ -0,0 +1,13 @@ +package ru.otus; + +public class MessagerConfig { + private final String message; + + public MessagerConfig(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/pom.xml b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/pom.xml new file mode 100644 index 00000000..34768b6e --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + ru.otus + springBoot-hello + 0.0.1-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter-parent + 2.3.3.RELEASE + + + + UTF-8 + 11 + 11 + + + + + + org.springframework.boot + spring-boot-starter + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/java/ru/otus/HelloWorldDemo.java b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/java/ru/otus/HelloWorldDemo.java new file mode 100644 index 00000000..e7a3a951 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/java/ru/otus/HelloWorldDemo.java @@ -0,0 +1,20 @@ +package ru.otus; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + + +@SpringBootApplication +public class HelloWorldDemo { + public static void main(String[] args) { + var context = SpringApplication.run(HelloWorldDemo.class, args); + var welcome = context.getBean(Welcome.class); + welcome.sayHello(); + } + + @Bean + public Welcome speaker() { + return () -> System.out.println("Hello, World"); + } +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/java/ru/otus/Welcome.java b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/java/ru/otus/Welcome.java new file mode 100644 index 00000000..4c21fa8a --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/java/ru/otus/Welcome.java @@ -0,0 +1,6 @@ +package ru.otus; + +@FunctionalInterface +public interface Welcome { + void sayHello(); +} diff --git a/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/resources/application.properties b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/resources/application.properties new file mode 100644 index 00000000..e69de29b diff --git a/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/resources/banner.txt b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/resources/banner.txt new file mode 100644 index 00000000..7ab92240 --- /dev/null +++ b/2020-08/spring-04-springboot/spring-04-springboot-solution/springBoot-hello/src/main/resources/banner.txt @@ -0,0 +1 @@ +Hell \ No newline at end of file