diff --git a/2021-03/spring-01/spring-01-solution/src/main/java/ru/otus/spring/Main.java b/2021-03/spring-01/spring-01-solution/src/main/java/ru/otus/spring/Main.java index f5b2fafb..a479110a 100644 --- a/2021-03/spring-01/spring-01-solution/src/main/java/ru/otus/spring/Main.java +++ b/2021-03/spring-01/spring-01-solution/src/main/java/ru/otus/spring/Main.java @@ -7,7 +7,8 @@ import ru.otus.spring.service.PersonService; public class Main { public static void main(String[] args) { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring-context.xml"); + ClassPathXmlApplicationContext context = + new ClassPathXmlApplicationContext("/spring-context.xml"); PersonService service = context.getBean(PersonService.class); Person ivan = service.getByName("Ivan"); System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge()); diff --git a/2021-03/spring-02/.gitignore b/2021-03/spring-02/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2021-03/spring-02/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2021-03/spring-02/src/main/java/ru/otus/spring/Main.java b/2021-03/spring-02/src/main/java/ru/otus/spring/Main.java index f5b2fafb..81a19859 100644 --- a/2021-03/spring-02/src/main/java/ru/otus/spring/Main.java +++ b/2021-03/spring-02/src/main/java/ru/otus/spring/Main.java @@ -1,17 +1,38 @@ package ru.otus.spring; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; import org.springframework.context.support.ClassPathXmlApplicationContext; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.dao.PersonDaoSimple; import ru.otus.spring.domain.Person; import ru.otus.spring.service.PersonService; +import ru.otus.spring.service.PersonServiceImpl; public class Main { public static void main(String[] args) { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring-context.xml"); - PersonService service = context.getBean(PersonService.class); + AnnotationConfigApplicationContext context = + new AnnotationConfigApplicationContext(); + + PersonDao dao = new PersonDaoSimple(); + + context.getBeanFactory().registerSingleton("personDao", dao); + + PersonServiceImpl personService = new PersonServiceImpl(); + personService.setDao(dao); + + context.getBeanFactory().registerSingleton("personService", personService); + + context.refresh(); + + + PersonService service = (PersonService) context.getBean("personService"); Person ivan = service.getByName("Ivan"); System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge()); + // Данная операция, в принципе не нужна. // Мы не работаем пока что с БД, а Spring Boot сделает закрытие за нас // Подробности - через пару занятий diff --git a/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDao.java b/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDao.java index d33939bd..1af62d8a 100644 --- a/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDao.java +++ b/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDao.java @@ -2,7 +2,9 @@ package ru.otus.spring.dao; import ru.otus.spring.domain.Person; +import java.util.Optional; + public interface PersonDao { - Person findByName(String name); + Optional findByName(String name); } diff --git a/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java index 7f7c97c6..79c67f16 100644 --- a/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java +++ b/2021-03/spring-02/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -2,9 +2,22 @@ package ru.otus.spring.dao; import ru.otus.spring.domain.Person; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + public class PersonDaoSimple implements PersonDao { - public Person findByName(String name) { - return new Person(name, 18); + private final List persons = new ArrayList<>(); + + public PersonDaoSimple() { + persons.add(new Person("Ivan", 18)); + persons.add(new Person("Masha", 18)); + } + + public Optional findByName(String name) { + return this.persons.stream() + .filter(p -> p.getName().equals(name)) + .findAny(); } } diff --git a/2021-03/spring-02/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2021-03/spring-02/src/main/java/ru/otus/spring/service/PersonServiceImpl.java index 794c29dd..a34e17e5 100644 --- a/2021-03/spring-02/src/main/java/ru/otus/spring/service/PersonServiceImpl.java +++ b/2021-03/spring-02/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -5,13 +5,17 @@ import ru.otus.spring.domain.Person; public class PersonServiceImpl implements PersonService { - private final PersonDao dao; + private PersonDao dao; - public PersonServiceImpl(PersonDao dao) { - this.dao = dao; + public PersonServiceImpl() { } public Person getByName(String name) { - return dao.findByName(name); + return dao.findByName(name) + .orElseThrow(IllegalArgumentException::new); + } + + public void setDao(PersonDao dao) { + this.dao = dao; } } diff --git a/2021-03/spring-02/src/main/resources/spring-context.xml b/2021-03/spring-02/src/main/resources/spring-context.xml index c3541cec..836d9ec5 100644 --- a/2021-03/spring-02/src/main/resources/spring-context.xml +++ b/2021-03/spring-02/src/main/resources/spring-context.xml @@ -1,14 +1,13 @@ + http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context.xsd"> - - - - diff --git a/2021-03/spring-03/.gitignore b/2021-03/spring-03/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2021-03/spring-03/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2021-03/spring-03/pom.xml b/2021-03/spring-03/pom.xml new file mode 100644 index 00000000..a3108dd4 --- /dev/null +++ b/2021-03/spring-03/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + ru.otus + spring-03 + 1.0 + + pom + + + spring-03-exercise + spring-03-solution + + diff --git a/2021-03/spring-03/spring-03-exercise/pom.xml b/2021-03/spring-03/spring-03-exercise/pom.xml new file mode 100644 index 00000000..c2b1efb5 --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + ru.otus + spring-03-exercise + 1.0 + + + 11 + 11 + UTF-8 + + + + + org.springframework + spring-context + 5.3.4 + + + diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/Main.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..7a5028d6 --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,17 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import ru.otus.spring.domain.Person; +import ru.otus.spring.service.PersonService; + +public class Main { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = null; + + PersonService service = context.getBean(PersonService.class); + + Person ivan = service.getByName("Ivan"); + System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge()); + } +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/config/DaoConfig.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/config/DaoConfig.java new file mode 100644 index 00000000..30c6e352 --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/config/DaoConfig.java @@ -0,0 +1,11 @@ +package ru.otus.spring.config; + +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.dao.PersonDaoSimple; + +public class DaoConfig { + + public PersonDao personDao() { + return new PersonDaoSimple(); + } +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/config/ServicesConfig.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/config/ServicesConfig.java new file mode 100644 index 00000000..4443f064 --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/config/ServicesConfig.java @@ -0,0 +1,12 @@ +package ru.otus.spring.config; + +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.service.PersonService; +import ru.otus.spring.service.PersonServiceImpl; + +public class ServicesConfig { + + public PersonService personService(PersonDao dao) { + return new PersonServiceImpl(dao); + } +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java @@ -0,0 +1,8 @@ +package ru.otus.spring.dao; + +import ru.otus.spring.domain.Person; + +public interface PersonDao { + + Person findByName(String name); +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..7f7c97c6 --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,10 @@ +package ru.otus.spring.dao; + +import ru.otus.spring.domain.Person; + +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/domain/Person.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..c23be0c6 --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.domain; + +public class Person { + + private final String name; + private final int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonService.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonService.java @@ -0,0 +1,8 @@ +package ru.otus.spring.service; + +import ru.otus.spring.domain.Person; + +public interface PersonService { + + Person getByName(String name); +} diff --git a/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..794c29dd --- /dev/null +++ b/2021-03/spring-03/spring-03-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,17 @@ +package ru.otus.spring.service; + +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.domain.Person; + +public class PersonServiceImpl implements PersonService { + + private final PersonDao dao; + + public PersonServiceImpl(PersonDao dao) { + this.dao = dao; + } + + public Person getByName(String name) { + return dao.findByName(name); + } +} diff --git a/2021-03/spring-03/spring-03-solution/pom.xml b/2021-03/spring-03/spring-03-solution/pom.xml new file mode 100644 index 00000000..b808f910 --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + ru.otus + spring-03-solution + 1.0 + + + 11 + 11 + UTF-8 + + + + + org.springframework + spring-context + 5.3.4 + + + diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/Main.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..59e2765c --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,22 @@ +package ru.otus.spring; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import ru.otus.spring.domain.Person; +import ru.otus.spring.service.PersonService; + +@Configuration +@ComponentScan +public class Main { + + public static void main(String[] args) { + AnnotationConfigApplicationContext context = + new AnnotationConfigApplicationContext(Main.class); + + PersonService service = context.getBean(PersonService.class); + + Person ivan = service.getByName("Ivan"); + System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge()); + } +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/config/DaoConfig.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/config/DaoConfig.java new file mode 100644 index 00000000..13636773 --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/config/DaoConfig.java @@ -0,0 +1,15 @@ +package ru.otus.spring.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.dao.PersonDaoSimple; + +@Configuration +public class DaoConfig { + + @Bean + public PersonDao personDao() { + return new PersonDaoSimple(); + } +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/config/ServicesConfig.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/config/ServicesConfig.java new file mode 100644 index 00000000..9c488828 --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/config/ServicesConfig.java @@ -0,0 +1,16 @@ +package ru.otus.spring.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.service.PersonService; +import ru.otus.spring.service.PersonServiceImpl; + +@Configuration +public class ServicesConfig { + + @Bean + public PersonService personService(PersonDao dao) { + return new PersonServiceImpl(dao); + } +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDao.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDao.java @@ -0,0 +1,8 @@ +package ru.otus.spring.dao; + +import ru.otus.spring.domain.Person; + +public interface PersonDao { + + Person findByName(String name); +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..7f7c97c6 --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,10 @@ +package ru.otus.spring.dao; + +import ru.otus.spring.domain.Person; + +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/domain/Person.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..c23be0c6 --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.domain; + +public class Person { + + private final String name; + private final int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/service/PersonService.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/service/PersonService.java @@ -0,0 +1,8 @@ +package ru.otus.spring.service; + +import ru.otus.spring.domain.Person; + +public interface PersonService { + + Person getByName(String name); +} diff --git a/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..794c29dd --- /dev/null +++ b/2021-03/spring-03/spring-03-solution/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,17 @@ +package ru.otus.spring.service; + +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.domain.Person; + +public class PersonServiceImpl implements PersonService { + + private final PersonDao dao; + + public PersonServiceImpl(PersonDao dao) { + this.dao = dao; + } + + public Person getByName(String name) { + return dao.findByName(name); + } +}