From 226502b957dcedb2aadf19a3b253112afef662fc Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Tue, 28 Jan 2020 19:44:21 -0500 Subject: [PATCH 1/6] BAEL-3744: Added examples of how design patterns are used in the Spring framework. --- spring-core-3/pom.xml | 144 ++++++++++-------- .../spring/patterns/factory/Application.java | 19 +++ .../patterns/factory/ApplicationConfig.java | 9 ++ .../baeldung/spring/patterns/factory/Bar.java | 20 +++ .../baeldung/spring/patterns/factory/Foo.java | 7 + .../spring/patterns/proxy/Application.java | 12 ++ .../baeldung/spring/patterns/proxy/Book.java | 18 +++ .../spring/patterns/proxy/BookController.java | 18 +++ .../spring/patterns/proxy/BookManager.java | 18 +++ .../spring/patterns/proxy/BookRepository.java | 11 ++ .../patterns/singleton/Application.java | 12 ++ .../spring/patterns/singleton/Book.java | 4 + .../patterns/singleton/BookController.java | 19 +++ .../patterns/singleton/BookRepository.java | 17 +++ .../patterns/singleton/LibraryController.java | 18 +++ .../spring/patterns/template/Book.java | 32 ++++ .../patterns/template/BookRowMapper.java | 21 +++ 17 files changed, 335 insertions(+), 64 deletions(-) create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index cd82f23320..ac6d1b2b3b 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,72 +1,88 @@ - 4.0.0 - spring-core-3 - spring-core-3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + spring-core-3 + spring-core-3 - - com.baeldung - parent-spring-5 - 0.0.1-SNAPSHOT - ../parent-spring-5 - + + com.baeldung + parent-spring-5 + 0.0.1-SNAPSHOT + ../parent-spring-5 + - - - org.springframework - spring-beans - ${spring.version} - - - org.springframework - spring-context - ${spring.version} - - - org.springframework - spring-core - ${spring.version} - - - javax.annotation - javax.annotation-api - ${annotation-api.version} - - - org.springframework - spring-test - ${spring.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter.version} - test - - + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework + spring-beans + ${spring.version} + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-core + ${spring.version} + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + org.springframework + spring-test + ${spring.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven.surefire.version} - - - + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven.surefire.version} + + + - - 2.22.1 - 1.3.2 - + + 2.22.1 + 1.3.2 + 2.2.2.RELEASE + \ No newline at end of file diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java new file mode 100644 index 0000000000..8f0134d83c --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Application { + + @SuppressWarnings("resource") + public static void main(String[] args) { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + Bar bar = context.getBean(Bar.class, "Some name"); + + System.out.println(foo); + System.out.println("Bar's name: " + bar.getName()); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java new file mode 100644 index 0000000000..626947cfd5 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackageClasses = ApplicationConfig.class) +public class ApplicationConfig { +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java new file mode 100644 index 0000000000..8bd742c481 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class Bar { + + private String name; + + public Bar(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java new file mode 100644 index 0000000000..5edba6c50d --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java @@ -0,0 +1,7 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.stereotype.Component; + +@Component +public class Foo { +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java new file mode 100644 index 0000000000..d00f51ec96 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java new file mode 100644 index 0000000000..112396e232 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.proxy; + +public class Book { + + private String author; + + public Book(String author) { + this.author = author; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java new file mode 100644 index 0000000000..ab192826b8 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class BookController { + + @Autowired + private BookManager manager; + + @PostMapping("/book") + public Book create(@RequestParam String author) { + return manager.create(author); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java new file mode 100644 index 0000000000..d82218e404 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class BookManager { + + @Autowired + private BookRepository repository; + + @Transactional + public Book create(String author) { + System.out.println(repository.getClass().getName()); + return repository.create(author); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java new file mode 100644 index 0000000000..b100bc0a61 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.stereotype.Repository; + +@Repository +public class BookRepository { + + public Book create(String author) { + return new Book(author); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java new file mode 100644 index 0000000000..5d7545790a --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.patterns.singleton; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java new file mode 100644 index 0000000000..31d9d83683 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java @@ -0,0 +1,4 @@ +package com.baeldung.spring.patterns.singleton; + +public class Book { +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java new file mode 100644 index 0000000000..aa4bdb8371 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.patterns.singleton; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class BookController { + + @Autowired + private BookRepository repository; + + @GetMapping("/book/{id}") + public Book findById(@PathVariable long id) { + System.out.println(repository); + return repository.findById(id).get(); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java new file mode 100644 index 0000000000..3fde153f31 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.patterns.singleton; + +import java.util.Optional; + +import org.springframework.stereotype.Repository; + +@Repository +public class BookRepository { + + public long count() { + return 1; + } + + public Optional findById(long id) { + return Optional.of(new Book()); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java new file mode 100644 index 0000000000..76e273e2fb --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.singleton; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class LibraryController { + + @Autowired + private BookRepository repository; + + @GetMapping("/count") + public Long findCount() { + System.out.println(repository); + return repository.count(); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java new file mode 100644 index 0000000000..d601f01c67 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.patterns.template; + +public class Book { + + private long id; + private String title; + private String author; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java new file mode 100644 index 0000000000..3fe7bb8e59 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java @@ -0,0 +1,21 @@ +package com.baeldung.spring.patterns.template; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.springframework.jdbc.core.RowMapper; + +public class BookRowMapper implements RowMapper { + + @Override + public Book mapRow(ResultSet rs, int rowNum) throws SQLException { + + Book book = new Book(); + + book.setId(rs.getLong("id")); + book.setTitle(rs.getString("title")); + book.setAuthor(rs.getString("author")); + + return book; + } +} From cb72463256598c29b8d77373234960f8d4515a54 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Sat, 1 Feb 2020 13:21:44 -0500 Subject: [PATCH 2/6] BAEL-3744: Corrected whitespace in pom.xml --- spring-core-3/pom.xml | 174 +++++++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index ac6d1b2b3b..6bd4bf7e5d 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,88 +1,88 @@ - - - 4.0.0 - spring-core-3 - spring-core-3 - - - com.baeldung - parent-spring-5 - 0.0.1-SNAPSHOT - ../parent-spring-5 - - - - - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} - - - org.springframework - spring-tx - ${spring.version} - - - org.springframework - spring-jdbc - ${spring.version} - - - org.springframework - spring-beans - ${spring.version} - - - org.springframework - spring-context - ${spring.version} - - - org.springframework - spring-core - ${spring.version} - - - javax.annotation - javax.annotation-api - ${annotation-api.version} - - - org.springframework - spring-test - ${spring.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter.version} - test - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven.surefire.version} - - - - - - 2.22.1 - 1.3.2 - 2.2.2.RELEASE - - + + + 4.0.0 + spring-core-3 + spring-core-3 + + + com.baeldung + parent-spring-5 + 0.0.1-SNAPSHOT + ../parent-spring-5 + + + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework + spring-beans + ${spring.version} + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-core + ${spring.version} + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + org.springframework + spring-test + ${spring.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven.surefire.version} + + + + + + 2.22.1 + 1.3.2 + 2.2.2.RELEASE + + \ No newline at end of file From 31abf680ee76078d171c9138b9db4a393891456c Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Sat, 1 Feb 2020 13:28:33 -0500 Subject: [PATCH 3/6] BAEL-3744: Changed spacing back to original spacing --- spring-core-3/pom.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index 6bd4bf7e5d..205259e8e4 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-core-3 spring-core-3 @@ -15,9 +15,9 @@ - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} + org.springframework + spring-beans + ${spring.version} org.springframework @@ -30,9 +30,9 @@ ${spring.version} - org.springframework - spring-beans - ${spring.version} + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} org.springframework From 76df3d01175050c0d62be5c32e94a635436781e4 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Mon, 10 Feb 2020 20:36:52 -0500 Subject: [PATCH 4/6] BAEL-3744: Added unit tests for Spring Framework design patterns. --- ...nnotationConfigApplicationContextTest.java | 36 +++++++++++++++++++ .../patterns/factory/ApplicationConfig.java | 9 +++++ .../baeldung/spring/patterns/factory/Bar.java | 20 +++++++++++ .../baeldung/spring/patterns/factory/Foo.java | 7 ++++ 4 files changed, 72 insertions(+) create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java new file mode 100644 index 0000000000..57a8ece197 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.patterns.factory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class AnnotationConfigApplicationContextTest { + + @Test + @SuppressWarnings("resource") + public void whenGetSimpleBean_ThenReturnConstructedBean() { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void whenGetPrototypeBean_ThenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java new file mode 100644 index 0000000000..626947cfd5 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackageClasses = ApplicationConfig.class) +public class ApplicationConfig { +} diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java new file mode 100644 index 0000000000..e2f825aab3 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class Bar { + + private String name; + + public Bar(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java new file mode 100644 index 0000000000..5edba6c50d --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java @@ -0,0 +1,7 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.stereotype.Component; + +@Component +public class Foo { +} From 53183ba16689ba7a33eefd02179e7f22c443ebaf Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Fri, 14 Feb 2020 10:51:26 -0500 Subject: [PATCH 5/6] BAEL-3744: Corrected test method names and added XML-based tests. --- ...nnotationConfigApplicationContextTest.java | 97 ++++++++++++------- .../src/test/resources/patterns-context.xml | 9 ++ 2 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 spring-core-3/src/test/resources/patterns-context.xml diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java index 57a8ece197..074818a639 100644 --- a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java @@ -1,36 +1,61 @@ -package com.baeldung.spring.patterns.factory; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -public class AnnotationConfigApplicationContextTest { - - @Test - @SuppressWarnings("resource") - public void whenGetSimpleBean_ThenReturnConstructedBean() { - - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Foo foo = context.getBean(Foo.class); - - assertNotNull(foo); - } - - @Test - @SuppressWarnings("resource") - public void whenGetPrototypeBean_ThenReturnConstructedBean() { - - String expectedName = "Some name"; - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Bar bar = context.getBean(Bar.class, expectedName); - - assertNotNull(bar); - assertThat(bar.getName(), is(expectedName)); - } -} +package com.baeldung.spring.patterns.factory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class AnnotationConfigApplicationContextTest { + + @Test + @SuppressWarnings("resource") + public void whenGetSimpleBean_thenReturnConstructedBean() { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void whenGetPrototypeBean_thenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } + + @Test + @SuppressWarnings("resource") + public void givenXmlConfiguration_whenGetSimpleBean_thenReturnConstructedBean() { + + ApplicationContext context = new ClassPathXmlApplicationContext("patterns-context.xml"); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void givenXmlConfiguration_whenGetPrototypeBean_thenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new ClassPathXmlApplicationContext("patterns-context.xml"); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } +} diff --git a/spring-core-3/src/test/resources/patterns-context.xml b/spring-core-3/src/test/resources/patterns-context.xml new file mode 100644 index 0000000000..106cde79a0 --- /dev/null +++ b/spring-core-3/src/test/resources/patterns-context.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file From 7b47b484e9feaed3a0c917fef89684562095b178 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Fri, 14 Feb 2020 15:02:48 -0500 Subject: [PATCH 6/6] BAEL-3744: Corrected unit test class names; split unit tests into two classes. --- ...ationConfigApplicationContextUnitTest.java | 36 +++++++++++++++++++ ...assPathXmlApplicationContextUnitTest.java} | 27 +------------- 2 files changed, 37 insertions(+), 26 deletions(-) create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java rename spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/{AnnotationConfigApplicationContextTest.java => ClassPathXmlApplicationContextUnitTest.java} (55%) diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java new file mode 100644 index 0000000000..66e01f261f --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.patterns.factory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class AnnotationConfigApplicationContextUnitTest { + + @Test + @SuppressWarnings("resource") + public void whenGetSimpleBean_thenReturnConstructedBean() { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void whenGetPrototypeBean_thenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java similarity index 55% rename from spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java rename to spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java index 074818a639..bb9988317e 100644 --- a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java @@ -6,34 +6,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -public class AnnotationConfigApplicationContextTest { - - @Test - @SuppressWarnings("resource") - public void whenGetSimpleBean_thenReturnConstructedBean() { - - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Foo foo = context.getBean(Foo.class); - - assertNotNull(foo); - } - - @Test - @SuppressWarnings("resource") - public void whenGetPrototypeBean_thenReturnConstructedBean() { - - String expectedName = "Some name"; - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Bar bar = context.getBean(Bar.class, expectedName); - - assertNotNull(bar); - assertThat(bar.getName(), is(expectedName)); - } +public class ClassPathXmlApplicationContextUnitTest { @Test @SuppressWarnings("resource")