diff --git a/java8/src/test/java/com/unitbv/Java8Tests.java b/java8/src/test/java/com/unitbv/Java8Tests.java index 849a3fe..841cdeb 100644 --- a/java8/src/test/java/com/unitbv/Java8Tests.java +++ b/java8/src/test/java/com/unitbv/Java8Tests.java @@ -214,8 +214,10 @@ public void getGetMapOfUsers(){ public void testGetPredicateForFilteringName(){ String name = "John"; Predicate predicate = dataSource.getPredicateForFilteringByName(name); - List expected = Stream.of(new User(1, "John", "Wick", 35, "actor")) - .collect(Collectors.toList()); + List expected = Stream.of( + new User(1, "John", "Wick", 35, "actor"), + new User(7, "Mark", "John", 17, "student") + ).collect(Collectors.toList()); List actual = dataSource.filterUsers(predicate); Assertions.assertEquals(expected, actual); } diff --git a/spring1/src/main/java/com/unitbv/autowiring/service/FormatServiceConstructorInjection.java b/spring1/src/main/java/com/unitbv/autowiring/service/FormatServiceConstructorInjection.java index 526880d..f67fd8d 100644 --- a/spring1/src/main/java/com/unitbv/autowiring/service/FormatServiceConstructorInjection.java +++ b/spring1/src/main/java/com/unitbv/autowiring/service/FormatServiceConstructorInjection.java @@ -6,7 +6,7 @@ @Service public class FormatServiceConstructorInjection { - private final FormatUtil formatUtil; + private FormatUtil formatUtil; public void checkFormatted() { System.out.println(this.formatUtil.formatted(true)); diff --git a/spring2/pom.xml b/spring2/pom.xml index 5e0f131..bae1643 100644 --- a/spring2/pom.xml +++ b/spring2/pom.xml @@ -17,8 +17,8 @@ UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/spring2/src/main/java/com/unitbv/dependsOn/AppConfig.java b/spring2/src/main/java/com/unitbv/dependsOn/AppConfig.java index 66592a2..811d391 100644 --- a/spring2/src/main/java/com/unitbv/dependsOn/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/dependsOn/AppConfig.java @@ -1,8 +1,28 @@ package com.unitbv.dependsOn; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; @Configuration +@ComponentScan("com.unitbv.dependsOn") public class AppConfig { + @Bean + @DependsOn("beanB") + public BeanA beana(){ + return new BeanA(); + } + + @Bean + @DependsOn("beanC") + public BeanB beanB(){ + return new BeanB(); + } + + @Bean + public BeanC beanC(){ + return new BeanC(); + } } diff --git a/spring2/src/main/java/com/unitbv/dependsOn/BeanA.java b/spring2/src/main/java/com/unitbv/dependsOn/BeanA.java index a419e37..a3eef12 100644 --- a/spring2/src/main/java/com/unitbv/dependsOn/BeanA.java +++ b/spring2/src/main/java/com/unitbv/dependsOn/BeanA.java @@ -1,4 +1,7 @@ package com.unitbv.dependsOn; +import org.springframework.stereotype.Component; + +@Component public class BeanA { } diff --git a/spring2/src/main/java/com/unitbv/dependsOn/BeanB.java b/spring2/src/main/java/com/unitbv/dependsOn/BeanB.java index e98848b..61fc2be 100644 --- a/spring2/src/main/java/com/unitbv/dependsOn/BeanB.java +++ b/spring2/src/main/java/com/unitbv/dependsOn/BeanB.java @@ -1,5 +1,8 @@ package com.unitbv.dependsOn; +import org.springframework.stereotype.Component; + +@Component public class BeanB { } diff --git a/spring2/src/main/java/com/unitbv/dependsOn/BeanC.java b/spring2/src/main/java/com/unitbv/dependsOn/BeanC.java index 4e3275d..088db9f 100644 --- a/spring2/src/main/java/com/unitbv/dependsOn/BeanC.java +++ b/spring2/src/main/java/com/unitbv/dependsOn/BeanC.java @@ -1,4 +1,7 @@ package com.unitbv.dependsOn; +import org.springframework.stereotype.Component; + +@Component public class BeanC { } diff --git a/spring2/src/main/java/com/unitbv/events/configuration/AppConfig.java b/spring2/src/main/java/com/unitbv/events/configuration/AppConfig.java index 9773c64..8c68534 100644 --- a/spring2/src/main/java/com/unitbv/events/configuration/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/events/configuration/AppConfig.java @@ -1,7 +1,26 @@ package com.unitbv.events.configuration; +import com.unitbv.events.event.CarForRentEvent; +import com.unitbv.events.service.CarService; +import com.unitbv.events.service.PersonService; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { + @Bean + public CarService carService(){ + return new CarService(); + } + + @Bean + public PersonService personService(){ + return new PersonService(new ApplicationEventPublisher() { + @Override + public void publishEvent(Object event) { + carService().addCarForRent((CarForRentEvent) event); + } + }); + } } diff --git a/spring2/src/main/java/com/unitbv/events/event/CarForRentEvent.java b/spring2/src/main/java/com/unitbv/events/event/CarForRentEvent.java index fb00378..d46d41e 100644 --- a/spring2/src/main/java/com/unitbv/events/event/CarForRentEvent.java +++ b/spring2/src/main/java/com/unitbv/events/event/CarForRentEvent.java @@ -1,9 +1,14 @@ package com.unitbv.events.event; +import com.unitbv.events.model.Car; import org.springframework.context.ApplicationEvent; public class CarForRentEvent extends ApplicationEvent { - public CarForRentEvent(Object source) { + public CarForRentEvent(Car source) { super(source); } + + public Car getCar(){ + return (Car) source; + } } diff --git a/spring2/src/main/java/com/unitbv/events/service/CarService.java b/spring2/src/main/java/com/unitbv/events/service/CarService.java index 1558f1a..150155b 100644 --- a/spring2/src/main/java/com/unitbv/events/service/CarService.java +++ b/spring2/src/main/java/com/unitbv/events/service/CarService.java @@ -18,5 +18,6 @@ public CarService() { } public void addCarForRent(CarForRentEvent carForRentEvent) { + this.availableCars.add(carForRentEvent.getCar()); } } diff --git a/spring2/src/main/java/com/unitbv/events/service/PersonService.java b/spring2/src/main/java/com/unitbv/events/service/PersonService.java index f4df14a..3981c41 100644 --- a/spring2/src/main/java/com/unitbv/events/service/PersonService.java +++ b/spring2/src/main/java/com/unitbv/events/service/PersonService.java @@ -1,5 +1,6 @@ package com.unitbv.events.service; +import com.unitbv.events.event.CarForRentEvent; import com.unitbv.events.model.Car; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; @@ -16,5 +17,8 @@ public PersonService(ApplicationEventPublisher eventPublisher) { public void rentCar(String model) { final Car car = new Car(model); //create a new event and publish car on event + + CarForRentEvent carForRentEvent= new CarForRentEvent(car); + this.eventPublisher.publishEvent(carForRentEvent); } } diff --git a/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigA.java b/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigA.java index 091de81..945204a 100644 --- a/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigA.java +++ b/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigA.java @@ -1,7 +1,12 @@ package com.unitbv.multipleConfigs; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ConfigA { + @Bean + public BeanA beanA(){ + return new BeanA(); + } } diff --git a/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigB.java b/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigB.java index e60ff4e..1e01124 100644 --- a/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigB.java +++ b/spring2/src/main/java/com/unitbv/multipleConfigs/ConfigB.java @@ -1,8 +1,12 @@ package com.unitbv.multipleConfigs; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ConfigB { - + @Bean + public BeanB beanB(){ + return new BeanB(); + } } diff --git a/spring2/src/main/java/com/unitbv/multipleConfigs/appConfig/AppConfig.java b/spring2/src/main/java/com/unitbv/multipleConfigs/appConfig/AppConfig.java index 654bacb..e9c7fb6 100644 --- a/spring2/src/main/java/com/unitbv/multipleConfigs/appConfig/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/multipleConfigs/appConfig/AppConfig.java @@ -1,10 +1,13 @@ package com.unitbv.multipleConfigs.appConfig; +import com.unitbv.multipleConfigs.ConfigA; +import com.unitbv.multipleConfigs.ConfigB; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(basePackages = "com.unitbv.multipleConfigs.appConfig") +@Import({ConfigA.class, ConfigB.class}) public class AppConfig { - } diff --git a/spring2/src/main/java/com/unitbv/profiles/automatically/AppConfig.java b/spring2/src/main/java/com/unitbv/profiles/automatically/AppConfig.java index 39e36ff..b3f9c75 100644 --- a/spring2/src/main/java/com/unitbv/profiles/automatically/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/automatically/AppConfig.java @@ -1,9 +1,15 @@ package com.unitbv.profiles.automatically; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.*; @Configuration -@ComponentScan +@ComponentScan("com.unitbv.profiles.automatically") +@PropertySource("classpath:profiles.properties") public class AppConfig { + @Bean + @Profile("${spring.profile.active}") + public DevDataSourceConfig devDataSourceConfig() + { + return new DevDataSourceConfig(); + } } diff --git a/spring2/src/main/java/com/unitbv/profiles/automatically/DevDataSourceConfig.java b/spring2/src/main/java/com/unitbv/profiles/automatically/DevDataSourceConfig.java index a456519..17d0b04 100644 --- a/spring2/src/main/java/com/unitbv/profiles/automatically/DevDataSourceConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/automatically/DevDataSourceConfig.java @@ -1,5 +1,6 @@ package com.unitbv.profiles.automatically; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; @Component diff --git a/spring2/src/main/java/com/unitbv/profiles/automatically/ProdDataSourceConfig.java b/spring2/src/main/java/com/unitbv/profiles/automatically/ProdDataSourceConfig.java index 8280304..f2d415b 100644 --- a/spring2/src/main/java/com/unitbv/profiles/automatically/ProdDataSourceConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/automatically/ProdDataSourceConfig.java @@ -1,8 +1,10 @@ package com.unitbv.profiles.automatically; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; @Component +@Profile("prod") public class ProdDataSourceConfig implements DataSourceConfig { @Override public void setup() { diff --git a/spring2/src/main/java/com/unitbv/profiles/programatically/AppConfig.java b/spring2/src/main/java/com/unitbv/profiles/programatically/AppConfig.java index a2fac53..182370a 100644 --- a/spring2/src/main/java/com/unitbv/profiles/programatically/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/programatically/AppConfig.java @@ -1,7 +1,26 @@ package com.unitbv.profiles.programatically; +import org.springframework.context.annotation.*; import org.springframework.context.annotation.Configuration; @Configuration +@ComponentScan("com.unitbv.profiles.programatically") public class AppConfig { + @Bean + @Profile("dev") + public DevDataSourceConfig devDataSourceConfig(){ + return new DevDataSourceConfig(); + } + + @Bean + @Profile("default") + public DevDataSourceConfig devDataSourceConfigDef(){ + return new DevDataSourceConfig(); + } + + @Bean + @Profile("prod") + public ProdDataSourceConfig prodDataSourceConfig(){ + return new ProdDataSourceConfig(); + } } diff --git a/spring2/src/main/java/com/unitbv/profiles/programatically/DevDataSourceConfig.java b/spring2/src/main/java/com/unitbv/profiles/programatically/DevDataSourceConfig.java index bdc7c93..9644348 100644 --- a/spring2/src/main/java/com/unitbv/profiles/programatically/DevDataSourceConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/programatically/DevDataSourceConfig.java @@ -1,5 +1,10 @@ package com.unitbv.profiles.programatically; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +@Component +@Profile("dev") public class DevDataSourceConfig implements DataSourceConfig { @Override public void setup() { diff --git a/spring2/src/main/java/com/unitbv/profiles/programatically/ProdDataSourceConfig.java b/spring2/src/main/java/com/unitbv/profiles/programatically/ProdDataSourceConfig.java index 3433fe5..b696894 100644 --- a/spring2/src/main/java/com/unitbv/profiles/programatically/ProdDataSourceConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/programatically/ProdDataSourceConfig.java @@ -1,5 +1,10 @@ package com.unitbv.profiles.programatically; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +@Component +@Profile("prod") public class ProdDataSourceConfig implements DataSourceConfig { @Override public void setup() { diff --git a/spring2/src/main/java/com/unitbv/profiles/stereotype/AppConfig.java b/spring2/src/main/java/com/unitbv/profiles/stereotype/AppConfig.java index da8e65d..4840c3b 100644 --- a/spring2/src/main/java/com/unitbv/profiles/stereotype/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/stereotype/AppConfig.java @@ -1,10 +1,19 @@ package com.unitbv.profiles.stereotype; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.*; @Configuration -@ComponentScan +@ComponentScan("com.unitbv.profiles.stereotype") public class AppConfig { + @Bean + @Profile({"default","dev"}) + public DevDataSourceConfig dataSourceConfig(){ + return new DevDataSourceConfig(); + } + + @Bean + @Profile("prod") + public ProdDataSourceConfig prodDataSourceConfig(){ + return new ProdDataSourceConfig(); + } } diff --git a/spring2/src/main/java/com/unitbv/profiles/stereotype/DevDataSourceConfig.java b/spring2/src/main/java/com/unitbv/profiles/stereotype/DevDataSourceConfig.java index bc28c29..25ab289 100644 --- a/spring2/src/main/java/com/unitbv/profiles/stereotype/DevDataSourceConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/stereotype/DevDataSourceConfig.java @@ -1,5 +1,11 @@ package com.unitbv.profiles.stereotype; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +@Component +@Profile("dev") public class DevDataSourceConfig implements DataSourceConfig { @Override public void setup() { diff --git a/spring2/src/main/java/com/unitbv/profiles/stereotype/ProdDataSourceConfig.java b/spring2/src/main/java/com/unitbv/profiles/stereotype/ProdDataSourceConfig.java index 0ceec4b..cead972 100644 --- a/spring2/src/main/java/com/unitbv/profiles/stereotype/ProdDataSourceConfig.java +++ b/spring2/src/main/java/com/unitbv/profiles/stereotype/ProdDataSourceConfig.java @@ -1,5 +1,10 @@ package com.unitbv.profiles.stereotype; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +@Component +@Profile("prod") public class ProdDataSourceConfig implements DataSourceConfig { @Override public void setup() { diff --git a/spring2/src/main/java/com/unitbv/properties/config/AppConfig.java b/spring2/src/main/java/com/unitbv/properties/config/AppConfig.java index df09351..e0aca41 100644 --- a/spring2/src/main/java/com/unitbv/properties/config/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/properties/config/AppConfig.java @@ -2,10 +2,20 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; @Configuration @RequiredArgsConstructor +@PropertySource("classpath:application.properties") public class AppConfig { + @Value("${car.model}") private String model; + @Bean + public Car car(){ + return new Car(model); + } } diff --git a/spring2/src/main/java/com/unitbv/properties/programatically/AppConfig.java b/spring2/src/main/java/com/unitbv/properties/programatically/AppConfig.java index b04c92c..f6e4f42 100644 --- a/spring2/src/main/java/com/unitbv/properties/programatically/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/properties/programatically/AppConfig.java @@ -1,5 +1,25 @@ package com.unitbv.properties.programatically; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.io.ClassPathResource; + +@Configuration public class AppConfig { + @Value("${car.model}") private String model; + + @Bean + public Car car(){ + return new Car(model); + } + + @Bean + public static PropertySourcesPlaceholderConfigurer properties() { + PropertySourcesPlaceholderConfigurer propConfigurer = new PropertySourcesPlaceholderConfigurer(); + propConfigurer.setLocation(new ClassPathResource("application.properties")); + return propConfigurer; + } } diff --git a/spring2/src/main/java/com/unitbv/properties/stereotype/AppConfig.java b/spring2/src/main/java/com/unitbv/properties/stereotype/AppConfig.java index 54d3141..e25fb81 100644 --- a/spring2/src/main/java/com/unitbv/properties/stereotype/AppConfig.java +++ b/spring2/src/main/java/com/unitbv/properties/stereotype/AppConfig.java @@ -1,5 +1,6 @@ package com.unitbv.properties.stereotype; +import org.springframework.context.annotation.Bean; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -8,4 +9,8 @@ @RequiredArgsConstructor @ComponentScan public class AppConfig { + @Bean + public Car car(){ + return new Car(); + } } diff --git a/spring2/src/main/java/com/unitbv/properties/stereotype/Car.java b/spring2/src/main/java/com/unitbv/properties/stereotype/Car.java index ca34c6a..d392c64 100644 --- a/spring2/src/main/java/com/unitbv/properties/stereotype/Car.java +++ b/spring2/src/main/java/com/unitbv/properties/stereotype/Car.java @@ -1,9 +1,16 @@ package com.unitbv.properties.stereotype; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + import lombok.Getter; @Getter +@Component +@PropertySource("classpath:application.properties") public class Car { + @Value("${car.model}") private String model; } \ No newline at end of file diff --git a/spring2/src/main/resources/application.properties b/spring2/src/main/resources/application.properties index e69de29..a8d8dfc 100644 --- a/spring2/src/main/resources/application.properties +++ b/spring2/src/main/resources/application.properties @@ -0,0 +1 @@ +car.model=Audi \ No newline at end of file diff --git a/spring2/src/main/resources/profiles.properties b/spring2/src/main/resources/profiles.properties index e69de29..ddd90bb 100644 --- a/spring2/src/main/resources/profiles.properties +++ b/spring2/src/main/resources/profiles.properties @@ -0,0 +1 @@ +spring.profile.active=dev \ No newline at end of file