From 0865321f82538eaa0e1b26a7731d1d4f7532bc2c Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Tue, 7 Jul 2020 19:01:50 +0200 Subject: [PATCH 01/18] JAVA-1645: Get rid of the overriden spring-boot.version property --- persistence-modules/spring-data-redis/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/persistence-modules/spring-data-redis/pom.xml b/persistence-modules/spring-data-redis/pom.xml index d2bf074d03..d271df31c7 100644 --- a/persistence-modules/spring-data-redis/pom.xml +++ b/persistence-modules/spring-data-redis/pom.xml @@ -98,7 +98,6 @@ 3.2.4 0.10.0 0.6 - 2.1.9.RELEASE From 749b832ef8ba3db73745b262fa580d8f610a29db Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Tue, 7 Jul 2020 19:02:09 +0200 Subject: [PATCH 02/18] JAVA-1645: Use ReactiveStringRedisTemplate --- .../spring/data/reactive/redis/config/RedisConfig.java | 5 ----- .../template/RedisTemplateListOpsIntegrationTest.java | 9 ++++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/reactive/redis/config/RedisConfig.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/reactive/redis/config/RedisConfig.java index d23d0092eb..de8e447ef8 100644 --- a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/reactive/redis/config/RedisConfig.java +++ b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/reactive/redis/config/RedisConfig.java @@ -31,11 +31,6 @@ public class RedisConfig { return new ReactiveRedisTemplate<>(factory, context); } - @Bean - public ReactiveRedisTemplate reactiveRedisTemplateString(ReactiveRedisConnectionFactory connectionFactory) { - return new ReactiveRedisTemplate<>(connectionFactory, RedisSerializationContext.string()); - } - @Bean public ReactiveKeyCommands keyCommands(final ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) { return reactiveRedisConnectionFactory.getReactiveConnection() diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java index 58846d7c27..cd5994c854 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/reactive/redis/template/RedisTemplateListOpsIntegrationTest.java @@ -2,9 +2,6 @@ package com.baeldung.spring.data.reactive.redis.template; import com.baeldung.spring.data.reactive.redis.SpringRedisReactiveApplication; - -import java.io.IOException; - import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -13,7 +10,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.ReactiveListOperations; -import org.springframework.data.redis.core.ReactiveRedisTemplate; +import org.springframework.data.redis.core.ReactiveStringRedisTemplate; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.junit4.SpringRunner; @@ -21,6 +18,8 @@ import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import redis.embedded.RedisServerBuilder; +import java.io.IOException; + @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = SpringRedisReactiveApplication.class) @DirtiesContext(classMode = ClassMode.BEFORE_CLASS) @@ -30,7 +29,7 @@ public class RedisTemplateListOpsIntegrationTest { private static redis.embedded.RedisServer redisServer; @Autowired - private ReactiveRedisTemplate redisTemplate; + private ReactiveStringRedisTemplate redisTemplate; private ReactiveListOperations reactiveListOps; From 9e82ccd8957cf9d51d6d2ee266a7ad7ae3f49798 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Sun, 12 Jul 2020 08:56:13 +0530 Subject: [PATCH 03/18] JAVA-619: Split or move core-java-modules/core-java-io-apis module --- core-java-modules/core-java-io-apis/README.md | 1 - libraries-apache-commons/README.md | 1 + libraries-apache-commons/pom.xml | 6 ++++++ .../baeldung/dirmonitoring/DirectoryMonitoringExample.java | 0 4 files changed, 7 insertions(+), 1 deletion(-) rename {core-java-modules/core-java-io-apis => libraries-apache-commons}/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java (100%) diff --git a/core-java-modules/core-java-io-apis/README.md b/core-java-modules/core-java-io-apis/README.md index 4d2bb0afb1..9399443ebd 100644 --- a/core-java-modules/core-java-io-apis/README.md +++ b/core-java-modules/core-java-io-apis/README.md @@ -7,7 +7,6 @@ This module contains articles about core Java input/output(IO) APIs. - [A Guide to the Java FileReader Class](https://www.baeldung.com/java-filereader) - [The Java File Class](https://www.baeldung.com/java-io-file) - [Java FileWriter](https://www.baeldung.com/java-filewriter) -- [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](https://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library) - [Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java](https://www.baeldung.com/java-path) - [Quick Use of FilenameFilter](https://www.baeldung.com/java-filename-filter) - [Guide to BufferedReader](https://www.baeldung.com/java-buffered-reader) diff --git a/libraries-apache-commons/README.md b/libraries-apache-commons/README.md index 439587266b..aceea3282a 100644 --- a/libraries-apache-commons/README.md +++ b/libraries-apache-commons/README.md @@ -13,3 +13,4 @@ This module contains articles about Apache Commons libraries. - [Apache Commons BeanUtils](https://www.baeldung.com/apache-commons-beanutils) - [Histograms with Apache Commons Frequency](https://www.baeldung.com/apache-commons-frequency) - [An Introduction to Apache Commons Lang 3](https://www.baeldung.com/java-commons-lang-3) +- [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](https://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library) \ No newline at end of file diff --git a/libraries-apache-commons/pom.xml b/libraries-apache-commons/pom.xml index 688a500c4a..74adddabcf 100644 --- a/libraries-apache-commons/pom.xml +++ b/libraries-apache-commons/pom.xml @@ -57,6 +57,11 @@ xchart ${xchart-version} + + commons-io + commons-io + ${common-io.version} + @@ -68,6 +73,7 @@ 1.6 3.5.2 3.6.1 + 2.5 diff --git a/core-java-modules/core-java-io-apis/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java b/libraries-apache-commons/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java similarity index 100% rename from core-java-modules/core-java-io-apis/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java rename to libraries-apache-commons/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java From c6b1b43bdde33f0f02178c2c477d49f1e3e3300a Mon Sep 17 00:00:00 2001 From: Ali Ben Messaoud Date: Mon, 6 Jul 2020 01:01:19 +0200 Subject: [PATCH 04/18] BAEL-4350: Difference between Statement and PreparedStatement Signed-off-by: Ali Ben Messaoud --- .../DatasourceFactory.java | 23 +++++ .../PersonEntity.java | 42 ++++++++ .../PreparedStatementPersonDao.java | 88 +++++++++++++++++ .../StatementPersonDao.java | 75 +++++++++++++++ .../DatasourceFactoryUnitTest.java | 22 +++++ .../PreparedStatementPersonDaoUnitTest.java | 94 ++++++++++++++++++ .../StatementPersonDaoUnitTest.java | 96 +++++++++++++++++++ 7 files changed, 440 insertions(+) create mode 100644 persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactory.java create mode 100644 persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PersonEntity.java create mode 100644 persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDao.java create mode 100644 persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDao.java create mode 100644 persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactoryUnitTest.java create mode 100644 persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDaoUnitTest.java create mode 100644 persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDaoUnitTest.java diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactory.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactory.java new file mode 100644 index 0000000000..adbdc66030 --- /dev/null +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactory.java @@ -0,0 +1,23 @@ +package com.baeldung.statmentVsPreparedstatment; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class DatasourceFactory { + + private Connection connection; + + public Connection getConnection() throws ClassNotFoundException, SQLException { + Class.forName("org.h2.Driver"); + connection = DriverManager.getConnection("jdbc:h2:mem:db_basic", "SA", ""); + connection.setAutoCommit(false); + return connection; + } + + public boolean createTables() throws SQLException { + String query = "create table if not exists PERSONS (ID INT, NAME VARCHAR(45))"; + return connection.createStatement().executeUpdate(query) == 0; + } + +} diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PersonEntity.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PersonEntity.java new file mode 100644 index 0000000000..72fc0c1e24 --- /dev/null +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PersonEntity.java @@ -0,0 +1,42 @@ +package com.baeldung.statmentVsPreparedstatment; + +import java.util.Objects; + +public class PersonEntity { + private int id; + private String name; + + public PersonEntity(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + PersonEntity that = (PersonEntity) o; + return id == that.id && Objects.equals(name, that.name); + } + + @Override public int hashCode() { + return Objects.hash(id, name); + } +} diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDao.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDao.java new file mode 100644 index 0000000000..47124d9139 --- /dev/null +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDao.java @@ -0,0 +1,88 @@ +package com.baeldung.statmentVsPreparedstatment; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class PreparedStatementPersonDao { + + private final Connection connection; + + public PreparedStatementPersonDao(Connection connection) { + this.connection = connection; + } + + public Optional getById(int id) throws SQLException { + String query = "SELECT id, name FROM persons WHERE id = ?"; + + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setInt(1, id); + ResultSet resultSet = preparedStatement.executeQuery(); + + if (resultSet.first()) { + + PersonEntity result = new PersonEntity(resultSet.getInt("id"), + resultSet.getString("name")); + + return Optional.of(result); + } else { + return Optional.empty(); + } + + } + + public void insert(PersonEntity personEntity) throws SQLException { + + String query = "INSERT INTO persons(id, name) VALUES( ?, ?)"; + + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setInt(1, personEntity.getId()); + preparedStatement.setString(2, personEntity.getName()); + preparedStatement.executeUpdate(); + + } + + public void insert(List personEntities) throws SQLException { + String query = "INSERT INTO persons(id, name) VALUES( ?, ?)"; + + PreparedStatement preparedStatement = connection.prepareStatement(query); + for (PersonEntity personEntity : personEntities) { + preparedStatement.setInt(1, personEntity.getId()); + preparedStatement.setString(2, personEntity.getName()); + preparedStatement.addBatch(); + } + preparedStatement.executeBatch(); + + } + + public void update(PersonEntity personEntity) throws SQLException { + String query = "UPDATE persons SET name = ? WHERE id = ?"; + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setString(1, personEntity.getName()); + preparedStatement.setInt(2, personEntity.getId()); + preparedStatement.executeUpdate(); + } + + public void deleteById(int id) throws SQLException { + String query = "DELETE FROM persons WHERE id = ?"; + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setInt(1, id); + preparedStatement.executeUpdate(); + } + + public List getAll() throws SQLException { + String query = "SELECT id, name FROM persons"; + + PreparedStatement preparedStatement = connection.prepareStatement(query); + ResultSet resultSet = preparedStatement.executeQuery(); + List result = new ArrayList<>(); + while (resultSet.next()) { + result.add(new PersonEntity(resultSet.getInt("id"), resultSet.getString("name"))); + } + return result; + } +} diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDao.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDao.java new file mode 100644 index 0000000000..935ba8efa2 --- /dev/null +++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDao.java @@ -0,0 +1,75 @@ +package com.baeldung.statmentVsPreparedstatment; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class StatementPersonDao { + + private final Connection connection; + + public StatementPersonDao(Connection connection) { + this.connection = connection; + } + + public Optional getById(int id) throws SQLException { + String query = "SELECT id, name, FROM persons WHERE id = '" + id + "'"; + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + if (resultSet.first()) { + PersonEntity result = new PersonEntity(resultSet.getInt("id"), + resultSet.getString("name")); + return Optional.of(result); + } else { + return Optional.empty(); + } + } + + public void insert(PersonEntity personEntity) throws SQLException { + String query = "INSERT INTO persons(id, name) VALUES(" + personEntity.getId() + ", '" + + personEntity.getName() + "')"; + + Statement statement = connection.createStatement(); + statement.executeUpdate(query); + } + + public void insert(List personEntities) throws SQLException { + for (PersonEntity personEntity : personEntities) { + insert(personEntity); + } + } + + public void update(PersonEntity personEntity) throws SQLException { + + String query = "UPDATE persons SET name = '" + personEntity.getName() + "' WHERE id = " + + personEntity.getId(); + + Statement statement = connection.createStatement(); + statement.executeUpdate(query); + + } + + public void deleteById(int id) throws SQLException { + String query = "DELETE FROM persons WHERE id = " + id; + Statement statement = connection.createStatement(); + statement.executeUpdate(query); + } + + public List getAll() throws SQLException { + String query = "SELECT id, name, FROM persons"; + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + List result = new ArrayList<>(); + while (resultSet.next()) { + result.add(new PersonEntity(resultSet.getInt("id"), resultSet.getString("name"))); + } + return result; + } +} diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactoryUnitTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactoryUnitTest.java new file mode 100644 index 0000000000..5d3b151d5d --- /dev/null +++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/DatasourceFactoryUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.statmentVsPreparedstatment; + +import org.junit.jupiter.api.Test; + +import java.sql.Connection; +import java.sql.SQLException; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class DatasourceFactoryUnitTest { + + @Test + void whenCreateConnectionAndTables_thenConnectionIsOpenAndTableIsCreated() + throws SQLException, ClassNotFoundException { + DatasourceFactory factory = new DatasourceFactory(); + Connection connection = factory.getConnection(); + + assertFalse(connection.isClosed()); + assertTrue(factory.createTables()); + } +} \ No newline at end of file diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDaoUnitTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDaoUnitTest.java new file mode 100644 index 0000000000..ce79f47802 --- /dev/null +++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/PreparedStatementPersonDaoUnitTest.java @@ -0,0 +1,94 @@ +package com.baeldung.statmentVsPreparedstatment; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +class PreparedStatementPersonDaoUnitTest { + private PreparedStatementPersonDao dao; + + @BeforeEach + void setup() throws SQLException, ClassNotFoundException { + DatasourceFactory datasourceFactory = new DatasourceFactory(); + Connection connection = datasourceFactory.getConnection(); + datasourceFactory.createTables(); + dao = new PreparedStatementPersonDao(connection); + } + + @Test + void whenInsertAPerson_thenItNeverThrowsAnException() { + assertDoesNotThrow(() -> dao.insert(new PersonEntity(1, "john"))); + } + + @Test + void whenInsertAPersonWithQuoteInText_thenItNeverThrowsAnException() { + assertDoesNotThrow(() -> dao.insert(new PersonEntity(1, "O'Brien"))); + } + + @Test + void whenGetAPersonById_thenItReturnThePersonInDatabase() throws SQLException { + dao.insert(new PersonEntity(1, "john")); + + Optional maybeEmployee = dao.getById(1); + assertTrue(maybeEmployee.isPresent()); + + PersonEntity personEntity = maybeEmployee.get(); + + assertEquals(1, personEntity.getId()); + assertEquals("john", personEntity.getName()); + } + + @Test + void whenInsertAndGetMultiplePersons_thenItNeverThrowsAnException() throws SQLException { + assertDoesNotThrow(() -> dao.insert( + Arrays.asList(new PersonEntity(1, "john"), new PersonEntity(2, "skit")))); + + List result = dao.getAll(); + + assertEquals(Arrays.asList(new PersonEntity(1, "john"), new PersonEntity(2, "skit")), + result); + } + + @Test + void whenUpdateAnExistentPerson_thenItReturnsTheUpdatedPerson() throws SQLException { + dao.insert(new PersonEntity(1, "john")); + dao.update(new PersonEntity(1, "johnny")); + + Optional maybePerson = dao.getById(1); + + assertTrue(maybePerson.isPresent()); + + PersonEntity personEntity = maybePerson.get(); + + assertEquals(1, personEntity.getId()); + assertEquals("johnny", personEntity.getName()); + } + + @Test + void whenDeleteAPersonById_thenItWillBeAbsentInDatabase() throws SQLException { + dao.insert(new PersonEntity(1, "john")); + dao.deleteById(1); + + Optional maybePerson = dao.getById(1); + + assertFalse(maybePerson.isPresent()); + } + + @Test + void whenAHackerUpdateAPerson_thenItUpdatesTheTargetPerson() throws SQLException { + dao.insert(Arrays.asList(new PersonEntity(1, "john"), new PersonEntity(2, "skeet"))); + dao.update(new PersonEntity(1, "hacker' --")); + + List result = dao.getAll(); + + assertEquals(Arrays.asList(new PersonEntity(1, "hacker' --"), new PersonEntity(2, "skeet")), + result); + } +} \ No newline at end of file diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDaoUnitTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDaoUnitTest.java new file mode 100644 index 0000000000..b31bdcc296 --- /dev/null +++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/statmentVsPreparedstatment/StatementPersonDaoUnitTest.java @@ -0,0 +1,96 @@ +package com.baeldung.statmentVsPreparedstatment; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +class StatementPersonDaoUnitTest { + + private StatementPersonDao dao; + + @BeforeEach + void setup() throws SQLException, ClassNotFoundException { + DatasourceFactory datasourceFactory = new DatasourceFactory(); + Connection connection = datasourceFactory.getConnection(); + datasourceFactory.createTables(); + dao = new StatementPersonDao(connection); + } + + @Test + void whenInsertAPerson_thenItNeverThrowsAnException() { + assertDoesNotThrow(() -> dao.insert(new PersonEntity(1, "john"))); + } + + @Test + void whenInsertAPersonWithQuoteInText_thenItWillThrowAnException() { + assertThrows(SQLException.class, () -> dao.insert(new PersonEntity(1, "O'Brien"))); + } + + @Test + void whenGetAPersonById_thenItReturnThePersonInDatabase() throws SQLException { + dao.insert(new PersonEntity(1, "john")); + + Optional maybeEmployee = dao.getById(1); + + assertTrue(maybeEmployee.isPresent()); + + PersonEntity personEntity = maybeEmployee.get(); + + assertEquals(1, personEntity.getId()); + assertEquals("john", personEntity.getName()); + } + + @Test + void whenInsertAndGetMultiplePersons_thenItNeverThrowsAnException() throws SQLException { + assertDoesNotThrow(() -> dao.insert( + Arrays.asList(new PersonEntity(1, "john"), new PersonEntity(2, "skeet")))); + + List result = dao.getAll(); + + assertEquals(Arrays.asList(new PersonEntity(1, "john"), new PersonEntity(2, "skeet")), + result); + } + + @Test + void whenUpdateAnExistentPerson_thenItReturnsTheUpdatedPerson() throws SQLException { + dao.insert(new PersonEntity(1, "john")); + dao.update(new PersonEntity(1, "johnny")); + + Optional maybePerson = dao.getById(1); + + assertTrue(maybePerson.isPresent()); + + PersonEntity personEntity = maybePerson.get(); + + assertEquals(1, personEntity.getId()); + assertEquals("johnny", personEntity.getName()); + } + + @Test + void whenDeleteAPersonById_thenItWillBeAbsentInDatabase() throws SQLException { + dao.insert(new PersonEntity(1, "john")); + dao.deleteById(1); + + Optional maybePerson = dao.getById(1); + + assertFalse(maybePerson.isPresent()); + } + + @Test + void whenAHackerUpdateAPerson_thenItAllPersonsAreUpdated() throws SQLException { + dao.insert(Arrays.asList(new PersonEntity(1, "john"), new PersonEntity(2, "skeet"))); + dao.update(new PersonEntity(1, "hacker' --")); + + List result = dao.getAll(); + + assertEquals(Arrays.asList(new PersonEntity(1, "hacker"), new PersonEntity(2, "hacker")), + result); + } +} \ No newline at end of file From d2e386881d0b6b280479996fae1936fb16eb3c9e Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Mon, 13 Jul 2020 20:58:32 +0200 Subject: [PATCH 05/18] JAVA-1636: Get rid of the overriden spring-boot.version property --- spring-cloud/spring-cloud-functions/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud/spring-cloud-functions/pom.xml b/spring-cloud/spring-cloud-functions/pom.xml index 4654d70dd7..7e6f5dfbdc 100644 --- a/spring-cloud/spring-cloud-functions/pom.xml +++ b/spring-cloud/spring-cloud-functions/pom.xml @@ -85,7 +85,6 @@ 1.0.1.RELEASE 2.0.2 1.1.0 - 2.0.4.RELEASE 1.0.10.RELEASE From 05446fb887c488d11e3944cd1e3ed7f5b0f1b8eb Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:24:34 +0530 Subject: [PATCH 06/18] JAVA-628: Moved 3 articles from spring-core --- spring-core/README.md | 4 +- .../com/baeldung/lombok/ApologizeService.java | 22 --------- .../com/baeldung/lombok/FarewellService.java | 18 -------- .../com/baeldung/lombok/GreetingService.java | 15 ------- .../com/baeldung/lombok/ThankingService.java | 15 ------- .../java/com/baeldung/lombok/Translator.java | 5 --- ...pplicationContextTestResourceNameType.java | 16 ------- ...plicationContextTestResourceQualifier.java | 22 --------- ...ogizeServiceAutowiringIntegrationTest.java | 33 -------------- .../ApologizeServiceIntegrationTest.java | 21 --------- .../FarewellAutowiringIntegrationTest.java | 31 ------------- .../FarewellServiceIntegrationTest.java | 20 --------- .../GreetingServiceIntegrationTest.java | 37 --------------- .../java/com/baeldung/lombok/TestConfig.java | 17 ------- ...nkingServiceAutowiringIntegrationTest.java | 31 ------------- .../ThankingServiceIntegrationTest.java | 20 --------- ...FieldResourceInjectionIntegrationTest.java | 30 ------------- ...hodByQualifierResourceIntegrationTest.java | 45 ------------------- .../MethodByTypeResourceIntegrationTest.java | 34 -------------- ...ethodResourceInjectionIntegrationTest.java | 34 -------------- .../NamedResourceIntegrationTest.java | 29 ------------ ...ifierResourceInjectionIntegrationTest.java | 42 ----------------- ...etterResourceInjectionIntegrationTest.java | 33 -------------- 23 files changed, 1 insertion(+), 573 deletions(-) delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/FarewellService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/GreetingService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/ThankingService.java delete mode 100644 spring-core/src/main/java/com/baeldung/lombok/Translator.java delete mode 100644 spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java delete mode 100644 spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/TestConfig.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java delete mode 100644 spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java diff --git a/spring-core/README.md b/spring-core/README.md index 1f3dcb783b..b8d46f6b34 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -3,10 +3,8 @@ This module contains articles about core Spring functionality ### Relevant Articles: -- [Wiring in Spring: @Autowired, @Resource and @Inject](https://www.baeldung.com/spring-annotations-resource-inject-autowire) -- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) + - [Introduction to Spring’s StreamUtils](https://www.baeldung.com/spring-stream-utils) -- [XML-Based Injection in Spring](https://www.baeldung.com/spring-xml-injection) - [A Quick Guide to the Spring @Lazy Annotation](https://www.baeldung.com/spring-lazy-annotation) - [BeanNameAware and BeanFactoryAware Interfaces in Spring](https://www.baeldung.com/spring-bean-name-factory-aware) - [Access a File from the Classpath in a Spring Application](https://www.baeldung.com/spring-classpath-file-access) diff --git a/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java b/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java deleted file mode 100644 index 76c3df8217..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.lombok; - -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class ApologizeService { - - private final Translator translator; - private final String message; - - @Autowired - public ApologizeService(Translator translator) { - this(translator, "sorry"); - } - - public String apologize() { - return translator.translate(message); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java b/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java deleted file mode 100644 index 4e8c4993cb..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.lombok; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class FarewellService { - - private final Translator translator; - - public FarewellService(Translator translator) { - this.translator = translator; - } - - public String farewell() { - return translator.translate("bye"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java b/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java deleted file mode 100644 index 0e03e177e1..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.lombok; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class GreetingService { - - @Autowired - private Translator translator; - - public String greet() { - return translator.translate("hello"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java b/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java deleted file mode 100644 index 2e0c398d2d..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.lombok; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class ThankingService { - - private final Translator translator; - - public String thank() { - return translator.translate("thank you"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/lombok/Translator.java b/spring-core/src/main/java/com/baeldung/lombok/Translator.java deleted file mode 100644 index 2dea20b726..0000000000 --- a/spring-core/src/main/java/com/baeldung/lombok/Translator.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.lombok; - -public interface Translator { - String translate(String input); -} diff --git a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java b/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java deleted file mode 100644 index cb1b5981e8..0000000000 --- a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.configuration; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.File; - -@Configuration -public class ApplicationContextTestResourceNameType { - - @Bean(name = "namedFile") - public File namedFile() { - File namedFile = new File("namedFile.txt"); - return namedFile; - } -} diff --git a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java b/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java deleted file mode 100644 index c9aa2f4a7d..0000000000 --- a/spring-core/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.configuration; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.File; - -@Configuration -public class ApplicationContextTestResourceQualifier { - - @Bean(name = "defaultFile") - public File defaultFile() { - File defaultFile = new File("defaultFile.txt"); - return defaultFile; - } - - @Bean(name = "namedFile") - public File namedFile() { - File namedFile = new File("namedFile.txt"); - return namedFile; - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java deleted file mode 100644 index a49dd84f11..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class ApologizeServiceAutowiringIntegrationTest { - - private final static String TRANSLATED = "TRANSLATED"; - - @Autowired - private ApologizeService apologizeService; - - @Autowired - private Translator translator; - - @Test - public void apologizeWithTranslatedMessage() { - when(translator.translate("sorry")).thenReturn(TRANSLATED); - assertEquals(TRANSLATED, apologizeService.apologize()); - } - -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java deleted file mode 100644 index 77f0c94299..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class ApologizeServiceIntegrationTest { - - private final static String MESSAGE = "MESSAGE"; - private final static String TRANSLATED = "TRANSLATED"; - - @Test - public void apologizeWithCustomTranslatedMessage() { - Translator translator = mock(Translator.class); - ApologizeService apologizeService = new ApologizeService(translator, MESSAGE); - when(translator.translate(MESSAGE)).thenReturn(TRANSLATED); - assertEquals(TRANSLATED, apologizeService.apologize()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java deleted file mode 100644 index ec0793bd2e..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class FarewellAutowiringIntegrationTest { - - @Autowired - private FarewellService farewellService; - - @Autowired - private Translator translator; - - @Test - public void sayByeWithTranslatedMessage() { - String translated = "translated"; - when(translator.translate("bye")).thenReturn(translated); - assertEquals(translated, farewellService.farewell()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java deleted file mode 100644 index 38959a511f..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class FarewellServiceIntegrationTest { - - private final static String TRANSLATED = "TRANSLATED"; - - @Test - public void sayByeWithTranslatedMessage() { - Translator translator = mock(Translator.class); - when(translator.translate("bye")).thenReturn(TRANSLATED); - FarewellService farewellService = new FarewellService(translator); - assertEquals(TRANSLATED, farewellService.farewell()); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java deleted file mode 100644 index 0516b5eb56..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class GreetingServiceIntegrationTest { - - @Autowired - private GreetingService greetingService; - - @Autowired - private Translator translator; - - @Test - public void greetWithTranslatedMessage() { - String translated = "translated"; - when(translator.translate("hello")).thenReturn(translated); - assertEquals(translated, greetingService.greet()); - } - - @Test(expected = NullPointerException.class) - public void throwWhenInstantiated() { - GreetingService greetingService = new GreetingService(); - greetingService.greet(); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/TestConfig.java b/spring-core/src/test/java/com/baeldung/lombok/TestConfig.java deleted file mode 100644 index 3278a8188f..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/TestConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.lombok; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import static org.mockito.Mockito.mock; - -@Configuration -@ComponentScan("com.baeldung.lombok") -class TestConfig { - - @Bean - public Translator mockTranslator() { - return mock(Translator.class); - } -} diff --git a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java deleted file mode 100644 index fb9abbad46..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = TestConfig.class) -public class ThankingServiceAutowiringIntegrationTest { - - @Autowired - private ThankingService thankingService; - - @Autowired - private Translator translator; - - @Test - public void thankWithTranslatedMessage() { - String translated = "translated"; - when(translator.translate("thank you")).thenReturn(translated); - assertEquals(translated, thankingService.thank()); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java deleted file mode 100644 index 680f926717..0000000000 --- a/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.lombok; - -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class ThankingServiceIntegrationTest { - - private final static String TRANSLATED = "TRANSLATED"; - - @Test - public void thankWithTranslatedMessage() { - Translator translator = mock(Translator.class); - when(translator.translate("thank you")).thenReturn(TRANSLATED); - ThankingService thankingService = new ThankingService(translator); - assertEquals(TRANSLATED, thankingService.thank()); - } -} \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java deleted file mode 100644 index 63a25cb499..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class FieldResourceInjectionIntegrationTest { - - @Resource(name = "namedFile") - private File defaultFile; - - @Test - public void givenResourceAnnotation_WhenOnField_ThenDependencyValid() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java deleted file mode 100644 index f5bb9f10cf..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceQualifier; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceQualifier.class) -public class MethodByQualifierResourceIntegrationTest { - - private File arbDependency; - private File anotherArbDependency; - - @Test - public void givenResourceQualifier_WhenSetter_ThenValidDependencies() { - assertNotNull(arbDependency); - assertEquals("namedFile.txt", arbDependency.getName()); - assertNotNull(anotherArbDependency); - assertEquals("defaultFile.txt", anotherArbDependency.getName()); - } - - @Resource - @Qualifier("namedFile") - public void setArbDependency(File arbDependency) { - this.arbDependency = arbDependency; - } - - @Resource - @Qualifier("defaultFile") - public void setAnotherArbDependency(File anotherArbDependency) { - this.anotherArbDependency = anotherArbDependency; - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java deleted file mode 100644 index 171cbfea47..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class MethodByTypeResourceIntegrationTest { - - private File defaultFile; - - @Resource - protected void setDefaultFile(File defaultFile) { - this.defaultFile = defaultFile; - } - - @Test - public void givenResourceAnnotation_WhenSetter_ThenValidDependency() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java deleted file mode 100644 index 2e1c3c39a9..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class MethodResourceInjectionIntegrationTest { - - private File defaultFile; - - @Resource(name = "namedFile") - protected void setDefaultFile(File defaultFile) { - this.defaultFile = defaultFile; - } - - @Test - public void givenResourceAnnotation_WhenSetter_ThenDependencyValid() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java deleted file mode 100644 index d52660e9b8..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class NamedResourceIntegrationTest { - - @Resource(name = "namedFile") - private File testFile; - - @Test - public void givenResourceAnnotation_WhenOnField_THEN_DEPENDENCY_Found() { - assertNotNull(testFile); - assertEquals("namedFile.txt", testFile.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java deleted file mode 100644 index 3f812350c9..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceQualifier; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceQualifier.class) -public class QualifierResourceInjectionIntegrationTest { - - @Resource - @Qualifier("defaultFile") - private File dependency1; - - @Resource - @Qualifier("namedFile") - private File dependency2; - - @Test - public void givenResourceAnnotation_WhenField_ThenDependency1Valid() { - assertNotNull(dependency1); - assertEquals("defaultFile.txt", dependency1.getName()); - } - - @Test - public void givenResourceQualifier_WhenField_ThenDependency2Valid() { - assertNotNull(dependency2); - assertEquals("namedFile.txt", dependency2.getName()); - } -} diff --git a/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java deleted file mode 100644 index ae13b2336a..0000000000 --- a/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.resource; - -import com.baeldung.configuration.ApplicationContextTestResourceNameType; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.annotation.Resource; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestResourceNameType.class) -public class SetterResourceInjectionIntegrationTest { - - private File defaultFile; - - @Resource - protected void setDefaultFile(File defaultFile) { - this.defaultFile = defaultFile; - } - - @Test - public void givenResourceAnnotation_WhenOnSetter_THEN_MUST_INJECT_Dependency() { - assertNotNull(defaultFile); - assertEquals("namedFile.txt", defaultFile.getName()); - } -} From cf4ed21884090db86ff4b86ace4b506193b5a2c2 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:25:43 +0530 Subject: [PATCH 07/18] JAVA-628: Moved 4 articles from spring-core-2 --- spring-core-2/README.md | 4 - .../CustomAnnotationConfiguration.java | 9 -- .../baeldung/customannotation/DataAccess.java | 14 --- .../DataAccessAnnotationProcessor.java | 37 ------- .../DataAccessFieldCallback.java | 96 ------------------- .../baeldung/customannotation/GenericDAO.java | 30 ------ .../com/baeldung/customscope/TenantBean.java | 14 --- .../TenantBeanFactoryPostProcessor.java | 13 --- .../customscope/TenantBeansConfig.java | 21 ---- .../com/baeldung/customscope/TenantScope.java | 43 --------- .../customscope/TenantScopeConfig.java | 14 --- .../baeldung/sampleabstract/BallService.java | 28 ------ .../sampleabstract/BasketballService.java | 13 --- .../com/baeldung/sampleabstract/DemoApp.java | 18 ---- .../sampleabstract/LogRepository.java | 12 --- .../sampleabstract/RuleRepository.java | 12 --- .../startup/AllStrategiesExampleBean.java | 35 ------- .../startup/EventListenerExampleBean.java | 21 ---- .../startup/InitMethodExampleBean.java | 24 ----- .../startup/InitializingBeanExampleBean.java | 26 ----- .../startup/InvalidInitExampleBean.java | 18 ---- .../LogicInConstructorExampleBean.java | 22 ----- .../startup/PostConstructExampleBean.java | 27 ------ .../baeldung/startup/SpringStartupConfig.java | 9 -- .../StartupApplicationListenerExample.java | 22 ----- .../src/main/resources/startupConfig.xml | 16 ---- .../baeldung/customannotation/Account.java | 40 -------- .../customannotation/BeanWithGenericDAO.java | 18 ---- .../DataAccessAnnotationIntegrationTest.java | 57 ----------- ...ataAccessFieldCallbackIntegrationTest.java | 51 ---------- .../com/baeldung/customannotation/Person.java | 31 ------ .../TenantScopeIntegrationTest.java | 72 -------------- .../startup/SpringStartupIntegrationTest.java | 44 --------- ...SpringStartupXMLConfigIntegrationTest.java | 26 ----- 34 files changed, 937 deletions(-) delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java delete mode 100644 spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java delete mode 100644 spring-core-2/src/main/resources/startupConfig.xml delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/Account.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customannotation/Person.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java delete mode 100644 spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java diff --git a/spring-core-2/README.md b/spring-core-2/README.md index 10d3080b45..3c6bd05876 100644 --- a/spring-core-2/README.md +++ b/spring-core-2/README.md @@ -6,13 +6,9 @@ This module contains articles about core Spring functionality - [Guide to Spring @Autowired](http://www.baeldung.com/spring-autowire) - [Spring Profiles](http://www.baeldung.com/spring-profiles) -- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) - [Quick Guide to Spring Bean Scopes](http://www.baeldung.com/spring-bean-scopes) -- [Custom Scope in Spring](http://www.baeldung.com/spring-custom-scope) - [@Order in Spring](http://www.baeldung.com/spring-order) - [Spring @Primary Annotation](http://www.baeldung.com/spring-primary) - [Spring Events](https://www.baeldung.com/spring-events) - [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations) -- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) -- [Running Setup Data on Startup in Spring](https://www.baeldung.com/running-setup-logic-on-startup-in-spring) - More articles: [[<-- prev]](/spring-core)[[next -->]](/spring-core-3) diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java b/spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java deleted file mode 100644 index 2e42a3f744..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.customannotation; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan("com.baeldung.customannotation") -public class CustomAnnotationConfiguration { -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java b/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java deleted file mode 100644 index 4160bad16d..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccess.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.customannotation; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) -@Documented -public @interface DataAccess { - Class entity(); -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java b/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java deleted file mode 100644 index 27008176a8..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.customannotation; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.stereotype.Component; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; - -@Component -public class DataAccessAnnotationProcessor implements BeanPostProcessor { - - private ConfigurableListableBeanFactory configurableListableBeanFactory; - - @Autowired - public DataAccessAnnotationProcessor(ConfigurableListableBeanFactory bf) { - configurableListableBeanFactory = bf; - } - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - scanDataAccessAnnotation(bean, beanName); - return bean; - } - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - return bean; - } - - protected void scanDataAccessAnnotation(Object bean, String beanName) { - Class managedBeanClass = bean.getClass(); - FieldCallback fcb = new DataAccessFieldCallback(configurableListableBeanFactory, bean); - ReflectionUtils.doWithFields(managedBeanClass, fcb); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java b/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java deleted file mode 100644 index 07b5298ea9..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.baeldung.customannotation; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.config.AutowireCapableBeanFactory; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; - -public final class DataAccessFieldCallback implements FieldCallback { - - private static Logger logger = LoggerFactory.getLogger(DataAccessFieldCallback.class); - private static int AUTOWIRE_MODE = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME; - - private static String ERROR_ENTITY_VALUE_NOT_SAME = "@DataAccess(entity) " + "value should have same type with injected generic type."; - private static String WARN_NON_GENERIC_VALUE = "@DataAccess annotation assigned " + "to raw (non-generic) declaration. This will make your code less type-safe."; - private static String ERROR_CREATE_INSTANCE = "Cannot create instance of " + "type '{}' or instance creation is failed because: {}"; - - private ConfigurableListableBeanFactory configurableListableBeanFactory; - private Object bean; - - public DataAccessFieldCallback(final ConfigurableListableBeanFactory bf, final Object bean) { - configurableListableBeanFactory = bf; - this.bean = bean; - } - - @Override - public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException { - if (!field.isAnnotationPresent(DataAccess.class)) { - return; - } - ReflectionUtils.makeAccessible(field); - final Type fieldGenericType = field.getGenericType(); - // In this example, get actual "GenericDAO' type. - final Class generic = field.getType(); - final Class classValue = field.getDeclaredAnnotation(DataAccess.class).entity(); - - if (genericTypeIsValid(classValue, fieldGenericType)) { - final String beanName = classValue.getSimpleName() + generic.getSimpleName(); - final Object beanInstance = getBeanInstance(beanName, generic, classValue); - field.set(bean, beanInstance); - } else { - throw new IllegalArgumentException(ERROR_ENTITY_VALUE_NOT_SAME); - } - } - - /** - * For example, if user write: - *
-     * @DataAccess(entity=Person.class) 
-     * private GenericDAO<Account> personGenericDAO;
-     * 
- * then this is should be failed. - */ - public boolean genericTypeIsValid(final Class clazz, final Type field) { - if (field instanceof ParameterizedType) { - final ParameterizedType parameterizedType = (ParameterizedType) field; - final Type type = parameterizedType.getActualTypeArguments()[0]; - - return type.equals(clazz); - } else { - logger.warn(WARN_NON_GENERIC_VALUE); - return true; - } - } - - public final Object getBeanInstance(final String beanName, final Class genericClass, final Class paramClass) { - Object daoInstance = null; - if (!configurableListableBeanFactory.containsBean(beanName)) { - logger.info("Creating new DataAccess bean named '{}'.", beanName); - - Object toRegister = null; - try { - final Constructor ctr = genericClass.getConstructor(Class.class); - toRegister = ctr.newInstance(paramClass); - } catch (final Exception e) { - logger.error(ERROR_CREATE_INSTANCE, genericClass.getTypeName(), e); - throw new RuntimeException(e); - } - - daoInstance = configurableListableBeanFactory.initializeBean(toRegister, beanName); - configurableListableBeanFactory.autowireBeanProperties(daoInstance, AUTOWIRE_MODE, true); - configurableListableBeanFactory.registerSingleton(beanName, daoInstance); - logger.info("Bean named '{}' created successfully.", beanName); - } else { - daoInstance = configurableListableBeanFactory.getBean(beanName); - logger.info("Bean named '{}' already exist used as current bean reference.", beanName); - } - return daoInstance; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java b/spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java deleted file mode 100644 index 0edd33b049..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customannotation/GenericDAO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.customannotation; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -public class GenericDAO { - - private Class entityClass; - private String message; - - public GenericDAO(Class entityClass) { - this.entityClass = entityClass; - } - - public List findAll() { - message = "Would create findAll query from " + entityClass.getSimpleName(); - return Collections.emptyList(); - } - - public Optional persist(E toPersist) { - message = "Would create persist query from " + toPersist.getClass().getSimpleName(); - return Optional.empty(); - } - - /** Only used for unit-testing. */ - public final String getMessage() { - return message; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java deleted file mode 100644 index e892ae9d9b..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBean.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.customscope; - -public class TenantBean { - - private final String name; - - public TenantBean(String name) { - this.name = name; - } - - public void sayHello() { - System.out.println(String.format("Hello from %s of type %s", this.name, this.getClass().getName())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java deleted file mode 100644 index 84ed0b46d7..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.customscope; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; - -public class TenantBeanFactoryPostProcessor implements BeanFactoryPostProcessor { - - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { - factory.registerScope("tenant", new TenantScope()); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java deleted file mode 100644 index c219000fe6..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantBeansConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.customscope; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; - -@Configuration -public class TenantBeansConfig { - - @Scope(scopeName = "tenant") - @Bean - public TenantBean foo() { - return new TenantBean("foo"); - } - - @Scope(scopeName = "tenant") - @Bean - public TenantBean bar() { - return new TenantBean("bar"); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java deleted file mode 100644 index f3077bc4c2..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScope.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.customscope; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.springframework.beans.factory.ObjectFactory; -import org.springframework.beans.factory.config.Scope; - -public class TenantScope implements Scope { - - private Map scopedObjects = Collections.synchronizedMap(new HashMap()); - private Map destructionCallbacks = Collections.synchronizedMap(new HashMap()); - - @Override - public Object get(String name, ObjectFactory objectFactory) { - if (!scopedObjects.containsKey(name)) { - scopedObjects.put(name, objectFactory.getObject()); - } - return scopedObjects.get(name); - } - - @Override - public Object remove(String name) { - destructionCallbacks.remove(name); - return scopedObjects.remove(name); - } - - @Override - public void registerDestructionCallback(String name, Runnable callback) { - destructionCallbacks.put(name, callback); - } - - @Override - public Object resolveContextualObject(String key) { - return null; - } - - @Override - public String getConversationId() { - return "tenant"; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java b/spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java deleted file mode 100644 index 1829e1e8c4..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/customscope/TenantScopeConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.customscope; - -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class TenantScopeConfig { - - @Bean - public static BeanFactoryPostProcessor beanFactoryPostProcessor() { - return new TenantBeanFactoryPostProcessor(); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java deleted file mode 100644 index 0d951aac8b..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BallService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.beans.factory.annotation.Autowired; - -import javax.annotation.PostConstruct; - -public abstract class BallService { - - private RuleRepository ruleRepository; - - private LogRepository logRepository; - - public BallService(RuleRepository ruleRepository) { - this.ruleRepository = ruleRepository; - } - - @Autowired - public final void setLogRepository(LogRepository logRepository) { - this.logRepository = logRepository; - } - - @PostConstruct - public void afterInitialize() { - - System.out.println(ruleRepository.toString()); - System.out.println(logRepository.toString()); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java deleted file mode 100644 index 4d6345b069..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/BasketballService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class BasketballService extends BallService { - - @Autowired - public BasketballService(RuleRepository ruleRepository) { - super(ruleRepository); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java deleted file mode 100644 index 5a308b2671..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/DemoApp.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = "com.baeldung.sampleabstract") -public class DemoApp { - - - public static void main(String[] args) { - - ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DemoApp.class); - } - -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java deleted file mode 100644 index 84979768b5..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/LogRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.stereotype.Component; - -@Component -public class LogRepository { - - @Override - public String toString() { - return "logRepository"; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java b/spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java deleted file mode 100644 index a1c5b5067f..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/sampleabstract/RuleRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.sampleabstract; - -import org.springframework.stereotype.Component; - -@Component -public class RuleRepository { - - @Override - public String toString() { - return "ruleRepository"; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java deleted file mode 100644 index e08309d474..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -@Component -@Scope(value = "prototype") -public class AllStrategiesExampleBean implements InitializingBean { - - private static final Logger LOG = LoggerFactory.getLogger(AllStrategiesExampleBean.class); - - public AllStrategiesExampleBean() { - LOG.info("Constructor"); - } - - @Override - public void afterPropertiesSet() throws Exception { - LOG.info("InitializingBean"); - } - - @PostConstruct - public void postConstruct() { - LOG.info("PostConstruct"); - } - - public void init() { - LOG.info("init-method"); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java deleted file mode 100644 index a76fc6a2b2..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/EventListenerExampleBean.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Component; - -@Component -public class EventListenerExampleBean { - private static final Logger LOG = LoggerFactory.getLogger(EventListenerExampleBean.class); - - public static int counter; - - @EventListener - public void onApplicationEvent(ContextRefreshedEvent event) { - LOG.info("Increment counter"); - counter++; - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java deleted file mode 100644 index a3b12028d1..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/InitMethodExampleBean.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class InitMethodExampleBean { - - private static final Logger LOG = LoggerFactory.getLogger(InitMethodExampleBean.class); - - @Autowired - private Environment environment; - - public void init() { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java deleted file mode 100644 index c625a172fd..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class InitializingBeanExampleBean implements InitializingBean { - - private static final Logger LOG = LoggerFactory.getLogger(InitializingBeanExampleBean.class); - - @Autowired - private Environment environment; - - @Override - public void afterPropertiesSet() throws Exception { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java deleted file mode 100644 index d31aee8acd..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.startup; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope("prototype") -public class InvalidInitExampleBean { - - @Autowired - private Environment environment; - - public InvalidInitExampleBean() { - environment.getActiveProfiles(); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java deleted file mode 100644 index ade7573bbe..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class LogicInConstructorExampleBean { - - private static final Logger LOG = LoggerFactory.getLogger(LogicInConstructorExampleBean.class); - - @Autowired - public LogicInConstructorExampleBean(Environment environment) { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java b/spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java deleted file mode 100644 index 1001043d86..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/PostConstructExampleBean.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.startup; - -import java.util.Arrays; - -import javax.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -@Component -@Scope(value = "prototype") -public class PostConstructExampleBean { - - private static final Logger LOG = LoggerFactory.getLogger(PostConstructExampleBean.class); - - @Autowired - private Environment environment; - - @PostConstruct - public void init() { - LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); - } -} diff --git a/spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java b/spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java deleted file mode 100644 index ad6492dadc..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/SpringStartupConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.startup; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan("com.baeldung.startup") -public class SpringStartupConfig { -} \ No newline at end of file diff --git a/spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java b/spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java deleted file mode 100644 index 2cc5e6abcb..0000000000 --- a/spring-core-2/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.startup; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.stereotype.Component; - -@Component -public class StartupApplicationListenerExample implements ApplicationListener { - - private static final Logger LOG = LoggerFactory.getLogger(StartupApplicationListenerExample.class); - - public static int counter; - - @Override - public void onApplicationEvent(ContextRefreshedEvent event) { - LOG.info("Increment counter"); - counter++; - } -} diff --git a/spring-core-2/src/main/resources/startupConfig.xml b/spring-core-2/src/main/resources/startupConfig.xml deleted file mode 100644 index d42e0f6c2b..0000000000 --- a/spring-core-2/src/main/resources/startupConfig.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/Account.java b/spring-core-2/src/test/java/com/baeldung/customannotation/Account.java deleted file mode 100644 index cfdd8815e4..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/Account.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.customannotation; - -import java.io.Serializable; - -public class Account implements Serializable { - - private static final long serialVersionUID = 7857541629844398625L; - - private Long id; - private String email; - private Person person; - - public Account() { - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } - -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java b/spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java deleted file mode 100644 index a0707f263b..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.customannotation; - -import org.springframework.stereotype.Repository; - -@Repository -public class BeanWithGenericDAO { - - @DataAccess(entity = Person.class) - private GenericDAO personGenericDAO; - - public BeanWithGenericDAO() { - } - - public GenericDAO getPersonGenericDAO() { - return personGenericDAO; - } - -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java deleted file mode 100644 index 1baea4505b..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.baeldung.customannotation; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.CoreMatchers.sameInstance; -import static org.junit.Assert.assertThat; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) -public class DataAccessAnnotationIntegrationTest { - - @DataAccess(entity = Person.class) - private GenericDAO personGenericDAO; - @DataAccess(entity = Account.class) - private GenericDAO accountGenericDAO; - @DataAccess(entity = Person.class) - private GenericDAO anotherPersonGenericDAO; - - @Test - public void whenGenericDAOInitialized_thenNotNull() { - assertThat(personGenericDAO, is(notNullValue())); - assertThat(accountGenericDAO, is(notNullValue())); - } - - @Test - public void whenGenericDAOInjected_thenItIsSingleton() { - assertThat(personGenericDAO, not(sameInstance(accountGenericDAO))); - assertThat(personGenericDAO, not(equalTo(accountGenericDAO))); - - assertThat(personGenericDAO, sameInstance(anotherPersonGenericDAO)); - } - - @Test - public void whenFindAll_thenMessagesIsCorrect() { - personGenericDAO.findAll(); - assertThat(personGenericDAO.getMessage(), is("Would create findAll query from Person")); - - accountGenericDAO.findAll(); - assertThat(accountGenericDAO.getMessage(), is("Would create findAll query from Account")); - } - - @Test - public void whenPersist_thenMakeSureThatMessagesIsCorrect() { - personGenericDAO.persist(new Person()); - assertThat(personGenericDAO.getMessage(), is("Would create persist query from Person")); - - accountGenericDAO.persist(new Account()); - assertThat(accountGenericDAO.getMessage(), is("Would create persist query from Account")); - } -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java deleted file mode 100644 index bc7a5f7246..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.customannotation; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.assertThat; - -import java.lang.reflect.Type; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) -public class DataAccessFieldCallbackIntegrationTest { - - @Autowired - private ConfigurableListableBeanFactory configurableListableBeanFactory; - - @Autowired - private BeanWithGenericDAO beanWithGenericDAO; - - @Rule - public ExpectedException ex = ExpectedException.none(); - - @Test - public void whenObjectCreated_thenObjectCreationIsSuccessful() { - final DataAccessFieldCallback dataAccessFieldCallback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); - assertThat(dataAccessFieldCallback, is(notNullValue())); - } - - @Test - public void whenMethodGenericTypeIsValidCalled_thenReturnCorrectValue() throws NoSuchFieldException, SecurityException { - final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); - final Type fieldType = BeanWithGenericDAO.class.getDeclaredField("personGenericDAO").getGenericType(); - final boolean result = callback.genericTypeIsValid(Person.class, fieldType); - assertThat(result, is(true)); - } - - @Test - public void whenMethodGetBeanInstanceCalled_thenReturnCorrectInstance() { - final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); - final Object result = callback.getBeanInstance("personGenericDAO", GenericDAO.class, Person.class); - assertThat((result instanceof GenericDAO), is(true)); - } -} diff --git a/spring-core-2/src/test/java/com/baeldung/customannotation/Person.java b/spring-core-2/src/test/java/com/baeldung/customannotation/Person.java deleted file mode 100644 index 4fa70e51af..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customannotation/Person.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.customannotation; - -import java.io.Serializable; - -public class Person implements Serializable { - - private static final long serialVersionUID = 9005331414216374586L; - - private Long id; - private String name; - - public Person() { - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} diff --git a/spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java deleted file mode 100644 index 1cd7357a09..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.baeldung.customscope; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import java.util.Map; - -import org.junit.Test; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -public class TenantScopeIntegrationTest { - - @Test - public final void whenRegisterScopeAndBeans_thenContextContainsFooAndBar() { - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); - try { - ctx.register(TenantScopeConfig.class); - ctx.register(TenantBeansConfig.class); - ctx.refresh(); - - TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); - foo.sayHello(); - TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); - bar.sayHello(); - Map foos = ctx.getBeansOfType(TenantBean.class); - - assertThat(foo, not(equalTo(bar))); - assertThat(foos.size(), equalTo(2)); - assertTrue(foos.containsValue(foo)); - assertTrue(foos.containsValue(bar)); - - BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); - BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); - - assertThat(fooDefinition.getScope(), equalTo("tenant")); - assertThat(barDefinition.getScope(), equalTo("tenant")); - } finally { - ctx.close(); - } - } - - @Test - public final void whenComponentScan_thenContextContainsFooAndBar() { - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); - try { - ctx.scan("com.baeldung.customscope"); - ctx.refresh(); - - TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); - foo.sayHello(); - TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); - bar.sayHello(); - Map foos = ctx.getBeansOfType(TenantBean.class); - - assertThat(foo, not(equalTo(bar))); - assertThat(foos.size(), equalTo(2)); - assertTrue(foos.containsValue(foo)); - assertTrue(foos.containsValue(bar)); - - BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); - BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); - - assertThat(fooDefinition.getScope(), equalTo("tenant")); - assertThat(barDefinition.getScope(), equalTo("tenant")); - } finally { - ctx.close(); - } - } -} diff --git a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java deleted file mode 100644 index b58c093c31..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.startup; - -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.BeanCreationException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { SpringStartupConfig.class }, loader = AnnotationConfigContextLoader.class) -public class SpringStartupIntegrationTest { - - @Autowired - private ApplicationContext ctx; - - @Test(expected = BeanCreationException.class) - public void whenInstantiating_shouldThrowBCE() throws Exception { - ctx.getBean(InvalidInitExampleBean.class); - } - - @Test - public void whenPostConstruct_shouldLogEnv() throws Exception { - ctx.getBean(PostConstructExampleBean.class); - } - - @Test - public void whenConstructorInjection_shouldLogEnv() throws Exception { - ctx.getBean(LogicInConstructorExampleBean.class); - } - - @Test - public void whenInitializingBean_shouldLogEnv() throws Exception { - ctx.getBean(InitializingBeanExampleBean.class); - } - - @Test - public void whenApplicationListener_shouldRunOnce() throws Exception { - Assertions.assertThat(StartupApplicationListenerExample.counter).isEqualTo(1); - } -} \ No newline at end of file diff --git a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java b/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java deleted file mode 100644 index 3dfd4835df..0000000000 --- a/spring-core-2/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.startup; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration("classpath:startupConfig.xml") -public class SpringStartupXMLConfigIntegrationTest { - - @Autowired - private ApplicationContext ctx; - - @Test - public void whenPostConstruct_shouldLogEnv() throws Exception { - ctx.getBean(InitMethodExampleBean.class); - } - - @Test - public void whenAllStrategies_shouldLogOrder() throws Exception { - ctx.getBean(AllStrategiesExampleBean.class); - } -} From c3e41be3c43254f54c9b3c4e64506c7aa9376af4 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:27:20 +0530 Subject: [PATCH 08/18] JAVA-628: Moved 2 articles from spring-core-3 --- spring-core-3/README.md | 4 +- .../com/baeldung/collection/BaeldungBean.java | 18 ------ .../baeldung/collection/CollectionConfig.java | 50 --------------- .../collection/CollectionInjectionDemo.java | 21 ------- .../baeldung/collection/CollectionsBean.java | 62 ------------------- .../staticvalue/injection/Application.java | 16 ----- .../injection/PropertyController.java | 30 --------- 7 files changed, 2 insertions(+), 199 deletions(-) delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java delete mode 100644 spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java diff --git a/spring-core-3/README.md b/spring-core-3/README.md index 6c210b23ef..b6257cb9a4 100644 --- a/spring-core-3/README.md +++ b/spring-core-3/README.md @@ -7,8 +7,8 @@ This module contains articles about core Spring functionality - [Understanding getBean() in Spring](https://www.baeldung.com/spring-getbean) - [Guide to the Spring BeanFactory](https://www.baeldung.com/spring-beanfactory) - [How to use the Spring FactoryBean?](https://www.baeldung.com/spring-factorybean) -- [Spring – Injecting Collections](https://www.baeldung.com/spring-injecting-collections) - [Design Patterns in the Spring Framework](https://www.baeldung.com/spring-framework-design-patterns) -- [Injecting a Value in a Static Field in Spring](https://www.baeldung.com/spring-inject-static-field) - [Difference Between BeanFactory and ApplicationContext](https://www.baeldung.com/spring-beanfactory-vs-applicationcontext) +- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) +- [Custom Scope in Spring](http://www.baeldung.com/spring-custom-scope) - More articles: [[<-- prev]](/spring-core-2) diff --git a/spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java b/spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java deleted file mode 100644 index 6d7351df02..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/BaeldungBean.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.collection; - -/** - * Created by Gebruiker on 5/22/2018. - */ -public class BaeldungBean { - - private String name; - - public BaeldungBean(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java b/spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java deleted file mode 100644 index fbae2963e5..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/CollectionConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.collection; - -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; - -import java.util.*; - -@Configuration -public class CollectionConfig { - - @Bean - public CollectionsBean getCollectionsBean() { - return new CollectionsBean(new HashSet<>(Arrays.asList("John", "Adam", "Harry"))); - } - - @Bean - public List nameList(){ - return Arrays.asList("John", "Adam", "Harry", null); - } - - @Bean - public Map nameMap(){ - Map nameMap = new HashMap<>(); - nameMap.put(1, "John"); - nameMap.put(2, "Adam"); - nameMap.put(3, "Harry"); - return nameMap; - } - - @Bean - @Qualifier("CollectionsBean") - @Order(2) - public BaeldungBean getElement() { - return new BaeldungBean("John"); - } - - @Bean - @Order(3) - public BaeldungBean getAnotherElement() { - return new BaeldungBean("Adam"); - } - - @Bean - @Order(1) - public BaeldungBean getOneMoreElement() { - return new BaeldungBean("Harry"); - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java b/spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java deleted file mode 100644 index 2ee265f134..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.collection; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * Created by Gebruiker on 5/18/2018. - */ -public class CollectionInjectionDemo { - - public static void main(String[] args) { - - ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class); - CollectionsBean collectionsBean = context.getBean(CollectionsBean.class); - collectionsBean.printNameList(); - collectionsBean.printNameSet(); - collectionsBean.printNameMap(); - collectionsBean.printBeanList(); - collectionsBean.printNameListWithDefaults(); - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java b/spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java deleted file mode 100644 index fc90f2c6ff..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/collection/CollectionsBean.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.collection; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; - -/** - * Created by Gebruiker on 5/18/2018. - */ -public class CollectionsBean { - - @Autowired - private List nameList; - - private Set nameSet; - - private Map nameMap; - - @Autowired(required = false) - @Qualifier("CollectionsBean") - private List beanList = new ArrayList<>(); - - @Value("${names.list:}#{T(java.util.Collections).emptyList()}") - private List nameListWithDefaultValue; - - public CollectionsBean() { - } - - public CollectionsBean(Set strings) { - this.nameSet = strings; - } - - @Autowired - public void setNameMap(Map nameMap) { - this.nameMap = nameMap; - } - - public void printNameList() { - System.out.println(nameList); - } - - public void printNameSet() { - System.out.println(nameSet); - } - - public void printNameMap() { - System.out.println(nameMap); - } - - public void printBeanList() { - System.out.println(beanList); - } - - public void printNameListWithDefaults() { - System.out.println(nameListWithDefaultValue); - } -} diff --git a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java b/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java deleted file mode 100644 index 45c47c955f..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/Application.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.staticvalue.injection; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.PropertySource; - -@SpringBootApplication -@PropertySource("/application.properties") - -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/staticvalue/injection/PropertyController.java b/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java deleted file mode 100644 index f5910ea4f8..0000000000 --- a/spring-core-3/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.staticvalue.injection; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Arrays; -import java.util.List; - -@RestController -public class PropertyController { - - @Value("${name}") - private String name; - - @Value("${name}") - private static String NAME_NULL; - - private static String NAME_STATIC; - - @Value("${name}") - public void setNameStatic(String name){ - PropertyController.NAME_STATIC = name; - } - - @GetMapping("/properties") - public List getProperties(){ - return Arrays.asList(this.name, NAME_STATIC, NAME_NULL) ; - } -} From 502bf3c45c3eed30562b7ef09e34b4f651ba4b80 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:27:50 +0530 Subject: [PATCH 09/18] JAVA-628: Moved 2 articles to spring-core-3 --- .../CustomAnnotationConfiguration.java | 9 ++ .../baeldung/customannotation/DataAccess.java | 14 +++ .../DataAccessAnnotationProcessor.java | 37 +++++++ .../DataAccessFieldCallback.java | 96 +++++++++++++++++++ .../baeldung/customannotation/GenericDAO.java | 30 ++++++ .../com/baeldung/customscope/TenantBean.java | 14 +++ .../TenantBeanFactoryPostProcessor.java | 13 +++ .../customscope/TenantBeansConfig.java | 21 ++++ .../com/baeldung/customscope/TenantScope.java | 43 +++++++++ .../customscope/TenantScopeConfig.java | 14 +++ .../baeldung/customannotation/Account.java | 40 ++++++++ .../customannotation/BeanWithGenericDAO.java | 18 ++++ .../DataAccessAnnotationIntegrationTest.java | 57 +++++++++++ ...ataAccessFieldCallbackIntegrationTest.java | 51 ++++++++++ .../com/baeldung/customannotation/Person.java | 31 ++++++ .../TenantScopeIntegrationTest.java | 72 ++++++++++++++ 16 files changed, 560 insertions(+) create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java create mode 100644 spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/Account.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customannotation/Person.java create mode 100644 spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java b/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java new file mode 100644 index 0000000000..2e42a3f744 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java @@ -0,0 +1,9 @@ +package com.baeldung.customannotation; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung.customannotation") +public class CustomAnnotationConfiguration { +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java new file mode 100644 index 0000000000..4160bad16d --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java @@ -0,0 +1,14 @@ +package com.baeldung.customannotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) +@Documented +public @interface DataAccess { + Class entity(); +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java new file mode 100644 index 0000000000..27008176a8 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java @@ -0,0 +1,37 @@ +package com.baeldung.customannotation; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.FieldCallback; + +@Component +public class DataAccessAnnotationProcessor implements BeanPostProcessor { + + private ConfigurableListableBeanFactory configurableListableBeanFactory; + + @Autowired + public DataAccessAnnotationProcessor(ConfigurableListableBeanFactory bf) { + configurableListableBeanFactory = bf; + } + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + scanDataAccessAnnotation(bean, beanName); + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + return bean; + } + + protected void scanDataAccessAnnotation(Object bean, String beanName) { + Class managedBeanClass = bean.getClass(); + FieldCallback fcb = new DataAccessFieldCallback(configurableListableBeanFactory, bean); + ReflectionUtils.doWithFields(managedBeanClass, fcb); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java new file mode 100644 index 0000000000..07b5298ea9 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java @@ -0,0 +1,96 @@ +package com.baeldung.customannotation; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.FieldCallback; + +public final class DataAccessFieldCallback implements FieldCallback { + + private static Logger logger = LoggerFactory.getLogger(DataAccessFieldCallback.class); + private static int AUTOWIRE_MODE = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME; + + private static String ERROR_ENTITY_VALUE_NOT_SAME = "@DataAccess(entity) " + "value should have same type with injected generic type."; + private static String WARN_NON_GENERIC_VALUE = "@DataAccess annotation assigned " + "to raw (non-generic) declaration. This will make your code less type-safe."; + private static String ERROR_CREATE_INSTANCE = "Cannot create instance of " + "type '{}' or instance creation is failed because: {}"; + + private ConfigurableListableBeanFactory configurableListableBeanFactory; + private Object bean; + + public DataAccessFieldCallback(final ConfigurableListableBeanFactory bf, final Object bean) { + configurableListableBeanFactory = bf; + this.bean = bean; + } + + @Override + public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException { + if (!field.isAnnotationPresent(DataAccess.class)) { + return; + } + ReflectionUtils.makeAccessible(field); + final Type fieldGenericType = field.getGenericType(); + // In this example, get actual "GenericDAO' type. + final Class generic = field.getType(); + final Class classValue = field.getDeclaredAnnotation(DataAccess.class).entity(); + + if (genericTypeIsValid(classValue, fieldGenericType)) { + final String beanName = classValue.getSimpleName() + generic.getSimpleName(); + final Object beanInstance = getBeanInstance(beanName, generic, classValue); + field.set(bean, beanInstance); + } else { + throw new IllegalArgumentException(ERROR_ENTITY_VALUE_NOT_SAME); + } + } + + /** + * For example, if user write: + *
+     * @DataAccess(entity=Person.class) 
+     * private GenericDAO<Account> personGenericDAO;
+     * 
+ * then this is should be failed. + */ + public boolean genericTypeIsValid(final Class clazz, final Type field) { + if (field instanceof ParameterizedType) { + final ParameterizedType parameterizedType = (ParameterizedType) field; + final Type type = parameterizedType.getActualTypeArguments()[0]; + + return type.equals(clazz); + } else { + logger.warn(WARN_NON_GENERIC_VALUE); + return true; + } + } + + public final Object getBeanInstance(final String beanName, final Class genericClass, final Class paramClass) { + Object daoInstance = null; + if (!configurableListableBeanFactory.containsBean(beanName)) { + logger.info("Creating new DataAccess bean named '{}'.", beanName); + + Object toRegister = null; + try { + final Constructor ctr = genericClass.getConstructor(Class.class); + toRegister = ctr.newInstance(paramClass); + } catch (final Exception e) { + logger.error(ERROR_CREATE_INSTANCE, genericClass.getTypeName(), e); + throw new RuntimeException(e); + } + + daoInstance = configurableListableBeanFactory.initializeBean(toRegister, beanName); + configurableListableBeanFactory.autowireBeanProperties(daoInstance, AUTOWIRE_MODE, true); + configurableListableBeanFactory.registerSingleton(beanName, daoInstance); + logger.info("Bean named '{}' created successfully.", beanName); + } else { + daoInstance = configurableListableBeanFactory.getBean(beanName); + logger.info("Bean named '{}' already exist used as current bean reference.", beanName); + } + return daoInstance; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java b/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java new file mode 100644 index 0000000000..0edd33b049 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java @@ -0,0 +1,30 @@ +package com.baeldung.customannotation; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +public class GenericDAO { + + private Class entityClass; + private String message; + + public GenericDAO(Class entityClass) { + this.entityClass = entityClass; + } + + public List findAll() { + message = "Would create findAll query from " + entityClass.getSimpleName(); + return Collections.emptyList(); + } + + public Optional persist(E toPersist) { + message = "Would create persist query from " + toPersist.getClass().getSimpleName(); + return Optional.empty(); + } + + /** Only used for unit-testing. */ + public final String getMessage() { + return message; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java new file mode 100644 index 0000000000..e892ae9d9b --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBean.java @@ -0,0 +1,14 @@ +package com.baeldung.customscope; + +public class TenantBean { + + private final String name; + + public TenantBean(String name) { + this.name = name; + } + + public void sayHello() { + System.out.println(String.format("Hello from %s of type %s", this.name, this.getClass().getName())); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java new file mode 100644 index 0000000000..84ed0b46d7 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeanFactoryPostProcessor.java @@ -0,0 +1,13 @@ +package com.baeldung.customscope; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; + +public class TenantBeanFactoryPostProcessor implements BeanFactoryPostProcessor { + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { + factory.registerScope("tenant", new TenantScope()); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java new file mode 100644 index 0000000000..c219000fe6 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantBeansConfig.java @@ -0,0 +1,21 @@ +package com.baeldung.customscope; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; + +@Configuration +public class TenantBeansConfig { + + @Scope(scopeName = "tenant") + @Bean + public TenantBean foo() { + return new TenantBean("foo"); + } + + @Scope(scopeName = "tenant") + @Bean + public TenantBean bar() { + return new TenantBean("bar"); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java new file mode 100644 index 0000000000..f3077bc4c2 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScope.java @@ -0,0 +1,43 @@ +package com.baeldung.customscope; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.ObjectFactory; +import org.springframework.beans.factory.config.Scope; + +public class TenantScope implements Scope { + + private Map scopedObjects = Collections.synchronizedMap(new HashMap()); + private Map destructionCallbacks = Collections.synchronizedMap(new HashMap()); + + @Override + public Object get(String name, ObjectFactory objectFactory) { + if (!scopedObjects.containsKey(name)) { + scopedObjects.put(name, objectFactory.getObject()); + } + return scopedObjects.get(name); + } + + @Override + public Object remove(String name) { + destructionCallbacks.remove(name); + return scopedObjects.remove(name); + } + + @Override + public void registerDestructionCallback(String name, Runnable callback) { + destructionCallbacks.put(name, callback); + } + + @Override + public Object resolveContextualObject(String key) { + return null; + } + + @Override + public String getConversationId() { + return "tenant"; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java new file mode 100644 index 0000000000..1829e1e8c4 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/customscope/TenantScopeConfig.java @@ -0,0 +1,14 @@ +package com.baeldung.customscope; + +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class TenantScopeConfig { + + @Bean + public static BeanFactoryPostProcessor beanFactoryPostProcessor() { + return new TenantBeanFactoryPostProcessor(); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java b/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java new file mode 100644 index 0000000000..cfdd8815e4 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java @@ -0,0 +1,40 @@ +package com.baeldung.customannotation; + +import java.io.Serializable; + +public class Account implements Serializable { + + private static final long serialVersionUID = 7857541629844398625L; + + private Long id; + private String email; + private Person person; + + public Account() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java b/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java new file mode 100644 index 0000000000..a0707f263b --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java @@ -0,0 +1,18 @@ +package com.baeldung.customannotation; + +import org.springframework.stereotype.Repository; + +@Repository +public class BeanWithGenericDAO { + + @DataAccess(entity = Person.class) + private GenericDAO personGenericDAO; + + public BeanWithGenericDAO() { + } + + public GenericDAO getPersonGenericDAO() { + return personGenericDAO; + } + +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java new file mode 100644 index 0000000000..1baea4505b --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java @@ -0,0 +1,57 @@ +package com.baeldung.customannotation; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.sameInstance; +import static org.junit.Assert.assertThat; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) +public class DataAccessAnnotationIntegrationTest { + + @DataAccess(entity = Person.class) + private GenericDAO personGenericDAO; + @DataAccess(entity = Account.class) + private GenericDAO accountGenericDAO; + @DataAccess(entity = Person.class) + private GenericDAO anotherPersonGenericDAO; + + @Test + public void whenGenericDAOInitialized_thenNotNull() { + assertThat(personGenericDAO, is(notNullValue())); + assertThat(accountGenericDAO, is(notNullValue())); + } + + @Test + public void whenGenericDAOInjected_thenItIsSingleton() { + assertThat(personGenericDAO, not(sameInstance(accountGenericDAO))); + assertThat(personGenericDAO, not(equalTo(accountGenericDAO))); + + assertThat(personGenericDAO, sameInstance(anotherPersonGenericDAO)); + } + + @Test + public void whenFindAll_thenMessagesIsCorrect() { + personGenericDAO.findAll(); + assertThat(personGenericDAO.getMessage(), is("Would create findAll query from Person")); + + accountGenericDAO.findAll(); + assertThat(accountGenericDAO.getMessage(), is("Would create findAll query from Account")); + } + + @Test + public void whenPersist_thenMakeSureThatMessagesIsCorrect() { + personGenericDAO.persist(new Person()); + assertThat(personGenericDAO.getMessage(), is("Would create persist query from Person")); + + accountGenericDAO.persist(new Account()); + assertThat(accountGenericDAO.getMessage(), is("Would create persist query from Account")); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java new file mode 100644 index 0000000000..bc7a5f7246 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java @@ -0,0 +1,51 @@ +package com.baeldung.customannotation; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +import java.lang.reflect.Type; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) +public class DataAccessFieldCallbackIntegrationTest { + + @Autowired + private ConfigurableListableBeanFactory configurableListableBeanFactory; + + @Autowired + private BeanWithGenericDAO beanWithGenericDAO; + + @Rule + public ExpectedException ex = ExpectedException.none(); + + @Test + public void whenObjectCreated_thenObjectCreationIsSuccessful() { + final DataAccessFieldCallback dataAccessFieldCallback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); + assertThat(dataAccessFieldCallback, is(notNullValue())); + } + + @Test + public void whenMethodGenericTypeIsValidCalled_thenReturnCorrectValue() throws NoSuchFieldException, SecurityException { + final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); + final Type fieldType = BeanWithGenericDAO.class.getDeclaredField("personGenericDAO").getGenericType(); + final boolean result = callback.genericTypeIsValid(Person.class, fieldType); + assertThat(result, is(true)); + } + + @Test + public void whenMethodGetBeanInstanceCalled_thenReturnCorrectInstance() { + final DataAccessFieldCallback callback = new DataAccessFieldCallback(configurableListableBeanFactory, beanWithGenericDAO); + final Object result = callback.getBeanInstance("personGenericDAO", GenericDAO.class, Person.class); + assertThat((result instanceof GenericDAO), is(true)); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java b/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java new file mode 100644 index 0000000000..4fa70e51af --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java @@ -0,0 +1,31 @@ +package com.baeldung.customannotation; + +import java.io.Serializable; + +public class Person implements Serializable { + + private static final long serialVersionUID = 9005331414216374586L; + + private Long id; + private String name; + + public Person() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java b/spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java new file mode 100644 index 0000000000..1cd7357a09 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/customscope/TenantScopeIntegrationTest.java @@ -0,0 +1,72 @@ +package com.baeldung.customscope; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + +import org.junit.Test; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class TenantScopeIntegrationTest { + + @Test + public final void whenRegisterScopeAndBeans_thenContextContainsFooAndBar() { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + try { + ctx.register(TenantScopeConfig.class); + ctx.register(TenantBeansConfig.class); + ctx.refresh(); + + TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); + foo.sayHello(); + TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); + bar.sayHello(); + Map foos = ctx.getBeansOfType(TenantBean.class); + + assertThat(foo, not(equalTo(bar))); + assertThat(foos.size(), equalTo(2)); + assertTrue(foos.containsValue(foo)); + assertTrue(foos.containsValue(bar)); + + BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); + BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); + + assertThat(fooDefinition.getScope(), equalTo("tenant")); + assertThat(barDefinition.getScope(), equalTo("tenant")); + } finally { + ctx.close(); + } + } + + @Test + public final void whenComponentScan_thenContextContainsFooAndBar() { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + try { + ctx.scan("com.baeldung.customscope"); + ctx.refresh(); + + TenantBean foo = (TenantBean) ctx.getBean("foo", TenantBean.class); + foo.sayHello(); + TenantBean bar = (TenantBean) ctx.getBean("bar", TenantBean.class); + bar.sayHello(); + Map foos = ctx.getBeansOfType(TenantBean.class); + + assertThat(foo, not(equalTo(bar))); + assertThat(foos.size(), equalTo(2)); + assertTrue(foos.containsValue(foo)); + assertTrue(foos.containsValue(bar)); + + BeanDefinition fooDefinition = ctx.getBeanDefinition("foo"); + BeanDefinition barDefinition = ctx.getBeanDefinition("bar"); + + assertThat(fooDefinition.getScope(), equalTo("tenant")); + assertThat(barDefinition.getScope(), equalTo("tenant")); + } finally { + ctx.close(); + } + } +} From 9ffb4d4d641d6e153b6f10729ddf084b7f575232 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:29:08 +0530 Subject: [PATCH 10/18] JAVA-628: Moved 3 articles to spring-core-4 --- spring-core-4/README.md | 3 ++ spring-core-4/pom.xml | 5 +++ .../com/baeldung/lombok/ApologizeService.java | 22 ++++++++++ .../com/baeldung/lombok/FarewellService.java | 18 ++++++++ .../com/baeldung/lombok/GreetingService.java | 15 +++++++ .../com/baeldung/lombok/ThankingService.java | 15 +++++++ .../java/com/baeldung/lombok/Translator.java | 5 +++ .../baeldung/sampleabstract/BallService.java | 28 ++++++++++++ .../sampleabstract/BasketballService.java | 13 ++++++ .../com/baeldung/sampleabstract/DemoApp.java | 18 ++++++++ .../sampleabstract/LogRepository.java | 12 +++++ .../sampleabstract/RuleRepository.java | 12 +++++ .../startup/AllStrategiesExampleBean.java | 35 +++++++++++++++ .../startup/EventListenerExampleBean.java | 21 +++++++++ .../startup/InitMethodExampleBean.java | 24 ++++++++++ .../startup/InitializingBeanExampleBean.java | 26 +++++++++++ .../startup/InvalidInitExampleBean.java | 18 ++++++++ .../LogicInConstructorExampleBean.java | 22 ++++++++++ .../startup/PostConstructExampleBean.java | 27 ++++++++++++ .../baeldung/startup/SpringStartupConfig.java | 9 ++++ .../StartupApplicationListenerExample.java | 22 ++++++++++ .../src/main/resources/startupConfig.xml | 16 +++++++ ...ogizeServiceAutowiringIntegrationTest.java | 33 ++++++++++++++ .../ApologizeServiceIntegrationTest.java | 21 +++++++++ .../FarewellAutowiringIntegrationTest.java | 31 +++++++++++++ .../FarewellServiceIntegrationTest.java | 20 +++++++++ .../GreetingServiceIntegrationTest.java | 37 ++++++++++++++++ .../java/com/baeldung/lombok/TestConfig.java | 17 +++++++ ...nkingServiceAutowiringIntegrationTest.java | 31 +++++++++++++ .../ThankingServiceIntegrationTest.java | 20 +++++++++ .../startup/SpringStartupIntegrationTest.java | 44 +++++++++++++++++++ ...SpringStartupXMLConfigIntegrationTest.java | 26 +++++++++++ 32 files changed, 666 insertions(+) create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/lombok/Translator.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java create mode 100644 spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java create mode 100644 spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java create mode 100644 spring-core-4/src/main/resources/startupConfig.xml create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java create mode 100644 spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java diff --git a/spring-core-4/README.md b/spring-core-4/README.md index 9da90ac77a..706c330f39 100644 --- a/spring-core-4/README.md +++ b/spring-core-4/README.md @@ -8,4 +8,7 @@ This module contains articles about core Spring functionality - [How to dynamically Autowire a Bean in Spring](https://www.baeldung.com/spring-dynamic-autowire) - [Spring @Import Annotation](https://www.baeldung.com/spring-import-annotation) - [Spring BeanPostProcessor](https://www.baeldung.com/spring-beanpostprocessor) +- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [Running Setup Data on Startup in Spring](https://www.baeldung.com/running-setup-logic-on-startup-in-spring) +- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok) - More articles: [[<-- prev]](/spring-core-3) diff --git a/spring-core-4/pom.xml b/spring-core-4/pom.xml index 299debbc3c..e5aee1f81d 100644 --- a/spring-core-4/pom.xml +++ b/spring-core-4/pom.xml @@ -29,6 +29,11 @@ spring-expression ${spring.version} + + org.projectlombok + lombok + ${lombok.version} + com.google.guava guava diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java b/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java new file mode 100644 index 0000000000..76c3df8217 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java @@ -0,0 +1,22 @@ +package com.baeldung.lombok; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class ApologizeService { + + private final Translator translator; + private final String message; + + @Autowired + public ApologizeService(Translator translator) { + this(translator, "sorry"); + } + + public String apologize() { + return translator.translate(message); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java b/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java new file mode 100644 index 0000000000..4e8c4993cb --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java @@ -0,0 +1,18 @@ +package com.baeldung.lombok; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FarewellService { + + private final Translator translator; + + public FarewellService(Translator translator) { + this.translator = translator; + } + + public String farewell() { + return translator.translate("bye"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java b/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java new file mode 100644 index 0000000000..0e03e177e1 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class GreetingService { + + @Autowired + private Translator translator; + + public String greet() { + return translator.translate("hello"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java b/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java new file mode 100644 index 0000000000..2e0c398d2d --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class ThankingService { + + private final Translator translator; + + public String thank() { + return translator.translate("thank you"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java b/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java new file mode 100644 index 0000000000..2dea20b726 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java @@ -0,0 +1,5 @@ +package com.baeldung.lombok; + +public interface Translator { + String translate(String input); +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java new file mode 100644 index 0000000000..0d951aac8b --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BallService.java @@ -0,0 +1,28 @@ +package com.baeldung.sampleabstract; + +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.PostConstruct; + +public abstract class BallService { + + private RuleRepository ruleRepository; + + private LogRepository logRepository; + + public BallService(RuleRepository ruleRepository) { + this.ruleRepository = ruleRepository; + } + + @Autowired + public final void setLogRepository(LogRepository logRepository) { + this.logRepository = logRepository; + } + + @PostConstruct + public void afterInitialize() { + + System.out.println(ruleRepository.toString()); + System.out.println(logRepository.toString()); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java new file mode 100644 index 0000000000..4d6345b069 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/BasketballService.java @@ -0,0 +1,13 @@ +package com.baeldung.sampleabstract; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class BasketballService extends BallService { + + @Autowired + public BasketballService(RuleRepository ruleRepository) { + super(ruleRepository); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java new file mode 100644 index 0000000000..5a308b2671 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/DemoApp.java @@ -0,0 +1,18 @@ +package com.baeldung.sampleabstract; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = "com.baeldung.sampleabstract") +public class DemoApp { + + + public static void main(String[] args) { + + ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DemoApp.class); + } + +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java new file mode 100644 index 0000000000..84979768b5 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/LogRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.sampleabstract; + +import org.springframework.stereotype.Component; + +@Component +public class LogRepository { + + @Override + public String toString() { + return "logRepository"; + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java b/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java new file mode 100644 index 0000000000..a1c5b5067f --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/sampleabstract/RuleRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.sampleabstract; + +import org.springframework.stereotype.Component; + +@Component +public class RuleRepository { + + @Override + public String toString() { + return "ruleRepository"; + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java new file mode 100644 index 0000000000..e08309d474 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/AllStrategiesExampleBean.java @@ -0,0 +1,35 @@ +package com.baeldung.startup; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +@Scope(value = "prototype") +public class AllStrategiesExampleBean implements InitializingBean { + + private static final Logger LOG = LoggerFactory.getLogger(AllStrategiesExampleBean.class); + + public AllStrategiesExampleBean() { + LOG.info("Constructor"); + } + + @Override + public void afterPropertiesSet() throws Exception { + LOG.info("InitializingBean"); + } + + @PostConstruct + public void postConstruct() { + LOG.info("PostConstruct"); + } + + public void init() { + LOG.info("init-method"); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java new file mode 100644 index 0000000000..a76fc6a2b2 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/EventListenerExampleBean.java @@ -0,0 +1,21 @@ +package com.baeldung.startup; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +public class EventListenerExampleBean { + private static final Logger LOG = LoggerFactory.getLogger(EventListenerExampleBean.class); + + public static int counter; + + @EventListener + public void onApplicationEvent(ContextRefreshedEvent event) { + LOG.info("Increment counter"); + counter++; + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java new file mode 100644 index 0000000000..a3b12028d1 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/InitMethodExampleBean.java @@ -0,0 +1,24 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class InitMethodExampleBean { + + private static final Logger LOG = LoggerFactory.getLogger(InitMethodExampleBean.class); + + @Autowired + private Environment environment; + + public void init() { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java new file mode 100644 index 0000000000..c625a172fd --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/InitializingBeanExampleBean.java @@ -0,0 +1,26 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class InitializingBeanExampleBean implements InitializingBean { + + private static final Logger LOG = LoggerFactory.getLogger(InitializingBeanExampleBean.class); + + @Autowired + private Environment environment; + + @Override + public void afterPropertiesSet() throws Exception { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java new file mode 100644 index 0000000000..d31aee8acd --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/InvalidInitExampleBean.java @@ -0,0 +1,18 @@ +package com.baeldung.startup; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope("prototype") +public class InvalidInitExampleBean { + + @Autowired + private Environment environment; + + public InvalidInitExampleBean() { + environment.getActiveProfiles(); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java new file mode 100644 index 0000000000..ade7573bbe --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/LogicInConstructorExampleBean.java @@ -0,0 +1,22 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class LogicInConstructorExampleBean { + + private static final Logger LOG = LoggerFactory.getLogger(LogicInConstructorExampleBean.class); + + @Autowired + public LogicInConstructorExampleBean(Environment environment) { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java b/spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java new file mode 100644 index 0000000000..1001043d86 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/PostConstructExampleBean.java @@ -0,0 +1,27 @@ +package com.baeldung.startup; + +import java.util.Arrays; + +import javax.annotation.PostConstruct; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = "prototype") +public class PostConstructExampleBean { + + private static final Logger LOG = LoggerFactory.getLogger(PostConstructExampleBean.class); + + @Autowired + private Environment environment; + + @PostConstruct + public void init() { + LOG.info("Env Default Profiles", Arrays.asList(environment.getDefaultProfiles())); + } +} diff --git a/spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java b/spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java new file mode 100644 index 0000000000..ad6492dadc --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/SpringStartupConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.startup; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung.startup") +public class SpringStartupConfig { +} \ No newline at end of file diff --git a/spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java b/spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java new file mode 100644 index 0000000000..2cc5e6abcb --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/startup/StartupApplicationListenerExample.java @@ -0,0 +1,22 @@ +package com.baeldung.startup; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +@Component +public class StartupApplicationListenerExample implements ApplicationListener { + + private static final Logger LOG = LoggerFactory.getLogger(StartupApplicationListenerExample.class); + + public static int counter; + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + LOG.info("Increment counter"); + counter++; + } +} diff --git a/spring-core-4/src/main/resources/startupConfig.xml b/spring-core-4/src/main/resources/startupConfig.xml new file mode 100644 index 0000000000..d42e0f6c2b --- /dev/null +++ b/spring-core-4/src/main/resources/startupConfig.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java new file mode 100644 index 0000000000..a49dd84f11 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.lombok; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class ApologizeServiceAutowiringIntegrationTest { + + private final static String TRANSLATED = "TRANSLATED"; + + @Autowired + private ApologizeService apologizeService; + + @Autowired + private Translator translator; + + @Test + public void apologizeWithTranslatedMessage() { + when(translator.translate("sorry")).thenReturn(TRANSLATED); + assertEquals(TRANSLATED, apologizeService.apologize()); + } + +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java new file mode 100644 index 0000000000..77f0c94299 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java @@ -0,0 +1,21 @@ +package com.baeldung.lombok; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ApologizeServiceIntegrationTest { + + private final static String MESSAGE = "MESSAGE"; + private final static String TRANSLATED = "TRANSLATED"; + + @Test + public void apologizeWithCustomTranslatedMessage() { + Translator translator = mock(Translator.class); + ApologizeService apologizeService = new ApologizeService(translator, MESSAGE); + when(translator.translate(MESSAGE)).thenReturn(TRANSLATED); + assertEquals(TRANSLATED, apologizeService.apologize()); + } +} diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java new file mode 100644 index 0000000000..ec0793bd2e --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.lombok; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class FarewellAutowiringIntegrationTest { + + @Autowired + private FarewellService farewellService; + + @Autowired + private Translator translator; + + @Test + public void sayByeWithTranslatedMessage() { + String translated = "translated"; + when(translator.translate("bye")).thenReturn(translated); + assertEquals(translated, farewellService.farewell()); + } +} diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java new file mode 100644 index 0000000000..38959a511f --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok; + +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class FarewellServiceIntegrationTest { + + private final static String TRANSLATED = "TRANSLATED"; + + @Test + public void sayByeWithTranslatedMessage() { + Translator translator = mock(Translator.class); + when(translator.translate("bye")).thenReturn(TRANSLATED); + FarewellService farewellService = new FarewellService(translator); + assertEquals(TRANSLATED, farewellService.farewell()); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java new file mode 100644 index 0000000000..0516b5eb56 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java @@ -0,0 +1,37 @@ +package com.baeldung.lombok; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class GreetingServiceIntegrationTest { + + @Autowired + private GreetingService greetingService; + + @Autowired + private Translator translator; + + @Test + public void greetWithTranslatedMessage() { + String translated = "translated"; + when(translator.translate("hello")).thenReturn(translated); + assertEquals(translated, greetingService.greet()); + } + + @Test(expected = NullPointerException.class) + public void throwWhenInstantiated() { + GreetingService greetingService = new GreetingService(); + greetingService.greet(); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java b/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java new file mode 100644 index 0000000000..3278a8188f --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java @@ -0,0 +1,17 @@ +package com.baeldung.lombok; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import static org.mockito.Mockito.mock; + +@Configuration +@ComponentScan("com.baeldung.lombok") +class TestConfig { + + @Bean + public Translator mockTranslator() { + return mock(Translator.class); + } +} diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java new file mode 100644 index 0000000000..fb9abbad46 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.lombok; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = TestConfig.class) +public class ThankingServiceAutowiringIntegrationTest { + + @Autowired + private ThankingService thankingService; + + @Autowired + private Translator translator; + + @Test + public void thankWithTranslatedMessage() { + String translated = "translated"; + when(translator.translate("thank you")).thenReturn(translated); + assertEquals(translated, thankingService.thank()); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java new file mode 100644 index 0000000000..680f926717 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok; + +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ThankingServiceIntegrationTest { + + private final static String TRANSLATED = "TRANSLATED"; + + @Test + public void thankWithTranslatedMessage() { + Translator translator = mock(Translator.class); + when(translator.translate("thank you")).thenReturn(TRANSLATED); + ThankingService thankingService = new ThankingService(translator); + assertEquals(TRANSLATED, thankingService.thank()); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java new file mode 100644 index 0000000000..b58c093c31 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupIntegrationTest.java @@ -0,0 +1,44 @@ +package com.baeldung.startup; + +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { SpringStartupConfig.class }, loader = AnnotationConfigContextLoader.class) +public class SpringStartupIntegrationTest { + + @Autowired + private ApplicationContext ctx; + + @Test(expected = BeanCreationException.class) + public void whenInstantiating_shouldThrowBCE() throws Exception { + ctx.getBean(InvalidInitExampleBean.class); + } + + @Test + public void whenPostConstruct_shouldLogEnv() throws Exception { + ctx.getBean(PostConstructExampleBean.class); + } + + @Test + public void whenConstructorInjection_shouldLogEnv() throws Exception { + ctx.getBean(LogicInConstructorExampleBean.class); + } + + @Test + public void whenInitializingBean_shouldLogEnv() throws Exception { + ctx.getBean(InitializingBeanExampleBean.class); + } + + @Test + public void whenApplicationListener_shouldRunOnce() throws Exception { + Assertions.assertThat(StartupApplicationListenerExample.counter).isEqualTo(1); + } +} \ No newline at end of file diff --git a/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java new file mode 100644 index 0000000000..3dfd4835df --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java @@ -0,0 +1,26 @@ +package com.baeldung.startup; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("classpath:startupConfig.xml") +public class SpringStartupXMLConfigIntegrationTest { + + @Autowired + private ApplicationContext ctx; + + @Test + public void whenPostConstruct_shouldLogEnv() throws Exception { + ctx.getBean(InitMethodExampleBean.class); + } + + @Test + public void whenAllStrategies_shouldLogOrder() throws Exception { + ctx.getBean(AllStrategiesExampleBean.class); + } +} From 013c4917d2b5df78d844b86d00b56379a046db48 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:30:45 +0530 Subject: [PATCH 11/18] JAVA-628: Corrected README, moved article code to appropriate module --- spring-di/README.md | 2 + .../AnotherArbitraryDependency.java | 13 ------ .../dependency/ArbitraryDependency.java | 13 ------ .../YetAnotherArbitraryDependency.java | 13 ------ .../FieldAutowiredIntegrationTest.java | 29 ------------- .../FieldAutowiredNameIntegrationTest.java | 29 ------------- ...ieldQualifierAutowiredIntegrationTest.java | 41 ------------------- .../ApplicationContextTestAutowiredName.java | 9 ---- ...licationContextTestAutowiredQualifier.java | 24 ----------- .../ApplicationContextTestAutowiredType.java | 15 ------- .../ApplicationContextTestInjectName.java | 16 -------- ...ApplicationContextTestInjectQualifier.java | 22 ---------- .../ApplicationContextTestInjectType.java | 15 ------- .../FieldByNameInjectIntegrationTest.java | 32 --------------- .../inject/FieldInjectIntegrationTest.java | 30 -------------- .../FieldQualifierInjectIntegrationTest.java | 41 ------------------- 16 files changed, 2 insertions(+), 342 deletions(-) delete mode 100644 spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java delete mode 100644 spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java delete mode 100644 spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java delete mode 100644 spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java delete mode 100644 spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java delete mode 100644 spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java delete mode 100644 spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java diff --git a/spring-di/README.md b/spring-di/README.md index 7571b12916..d470768f16 100644 --- a/spring-di/README.md +++ b/spring-di/README.md @@ -13,3 +13,5 @@ This module contains articles about dependency injection with Spring - [Controlling Bean Creation Order with @DependsOn Annotation](https://www.baeldung.com/spring-depends-on) - [Unsatisfied Dependency in Spring](https://www.baeldung.com/spring-unsatisfied-dependency) - [Circular Dependencies in Spring](https://www.baeldung.com/circular-dependencies-in-spring) +- [XML-Based Injection in Spring](https://www.baeldung.com/spring-xml-injection) +- More articles: [[next -->]](/spring-di-2) diff --git a/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java deleted file mode 100644 index 0e19523b7e..0000000000 --- a/spring-di/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.dependency; - -import org.springframework.stereotype.Component; - -@Component -public class AnotherArbitraryDependency extends ArbitraryDependency { - - private final String label = "Another Arbitrary Dependency"; - - public String toString() { - return label; - } -} diff --git a/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java deleted file mode 100644 index 3c90492d2c..0000000000 --- a/spring-di/src/main/java/com/baeldung/dependency/ArbitraryDependency.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.dependency; - -import org.springframework.stereotype.Component; - -@Component(value = "autowiredFieldDependency") -public class ArbitraryDependency { - - private final String label = "Arbitrary Dependency"; - - public String toString() { - return label; - } -} diff --git a/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java deleted file mode 100644 index a88abd0924..0000000000 --- a/spring-di/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.dependency; - -import org.springframework.stereotype.Component; - -@Component -public class YetAnotherArbitraryDependency extends ArbitraryDependency { - - private final String label = "Yet Another Arbitrary Dependency"; - - public String toString() { - return label; - } -} diff --git a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java deleted file mode 100644 index a78799f1d9..0000000000 --- a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.autowired; - -import com.baeldung.configuration.ApplicationContextTestAutowiredType; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestAutowiredType.class) -public class FieldAutowiredIntegrationTest { - - @Autowired - private ArbitraryDependency fieldDependency; - - @Test - public void givenAutowired_WhenSetOnField_ThenDependencyResolved() { - assertNotNull(fieldDependency); - assertEquals("Arbitrary Dependency", fieldDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java deleted file mode 100644 index 8f09e73c33..0000000000 --- a/spring-di/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.autowired; - -import com.baeldung.configuration.ApplicationContextTestAutowiredName; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestAutowiredName.class) -public class FieldAutowiredNameIntegrationTest { - - @Autowired - private ArbitraryDependency autowiredFieldDependency; - - @Test - public void givenAutowiredAnnotation_WhenOnField_ThenDependencyValid() { - assertNotNull(autowiredFieldDependency); - assertEquals("Arbitrary Dependency", autowiredFieldDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java b/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java deleted file mode 100644 index 01317aef6f..0000000000 --- a/spring-di/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.autowired; - -import com.baeldung.configuration.ApplicationContextTestAutowiredQualifier; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestAutowiredQualifier.class) -public class FieldQualifierAutowiredIntegrationTest { - - @Autowired - @Qualifier("autowiredFieldDependency") - private ArbitraryDependency fieldDependency1; - - @Autowired - @Qualifier("anotherAutowiredFieldDependency") - private ArbitraryDependency fieldDependency2; - - @Test - public void givenAutowiredQualifier_WhenOnField_ThenDep1Valid() { - assertNotNull(fieldDependency1); - assertEquals("Arbitrary Dependency", fieldDependency1.toString()); - } - - @Test - public void givenAutowiredQualifier_WhenOnField_ThenDep2Valid() { - assertNotNull(fieldDependency2); - assertEquals("Another Arbitrary Dependency", fieldDependency2.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java deleted file mode 100644 index 48c4495465..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.configuration; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = {"com.baeldung.dependency"}) -public class ApplicationContextTestAutowiredName { -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java deleted file mode 100644 index ef6690ab4b..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.AnotherArbitraryDependency; -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestAutowiredQualifier { - - @Bean - public ArbitraryDependency autowiredFieldDependency() { - ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); - - return autowiredFieldDependency; - } - - @Bean - public ArbitraryDependency anotherAutowiredFieldDependency() { - ArbitraryDependency anotherAutowiredFieldDependency = new AnotherArbitraryDependency(); - - return anotherAutowiredFieldDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java deleted file mode 100644 index 240bc466b7..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestAutowiredType { - - @Bean - public ArbitraryDependency autowiredFieldDependency() { - ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); - return autowiredFieldDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java deleted file mode 100644 index 851aa0b8ee..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.ArbitraryDependency; -import com.baeldung.dependency.YetAnotherArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestInjectName { - - @Bean - public ArbitraryDependency yetAnotherFieldInjectDependency() { - ArbitraryDependency yetAnotherFieldInjectDependency = new YetAnotherArbitraryDependency(); - return yetAnotherFieldInjectDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java deleted file mode 100644 index 59af5a91bb..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.AnotherArbitraryDependency; -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestInjectQualifier { - - @Bean - public ArbitraryDependency defaultFile() { - ArbitraryDependency defaultFile = new ArbitraryDependency(); - return defaultFile; - } - - @Bean - public ArbitraryDependency namedFile() { - ArbitraryDependency namedFile = new AnotherArbitraryDependency(); - return namedFile; - } -} diff --git a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java b/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java deleted file mode 100644 index 1e1f01f269..0000000000 --- a/spring-di/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.configuration; - -import com.baeldung.dependency.ArbitraryDependency; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class ApplicationContextTestInjectType { - - @Bean - public ArbitraryDependency injectDependency() { - ArbitraryDependency injectDependency = new ArbitraryDependency(); - return injectDependency; - } -} diff --git a/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java deleted file mode 100644 index f5897febab..0000000000 --- a/spring-di/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.inject; - -import com.baeldung.configuration.ApplicationContextTestInjectName; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.inject.Inject; -import javax.inject.Named; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestInjectName.class) -public class FieldByNameInjectIntegrationTest { - - @Inject - @Named("yetAnotherFieldInjectDependency") - private ArbitraryDependency yetAnotherFieldInjectDependency; - - @Test - public void givenInjectQualifier_WhenSetOnField_ThenDependencyValid() { - assertNotNull(yetAnotherFieldInjectDependency); - assertEquals("Yet Another Arbitrary Dependency", yetAnotherFieldInjectDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java deleted file mode 100644 index 45b7c8015c..0000000000 --- a/spring-di/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.inject; - -import com.baeldung.configuration.ApplicationContextTestInjectType; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.inject.Inject; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration( - loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestInjectType.class) -public class FieldInjectIntegrationTest { - - @Inject - private ArbitraryDependency fieldInjectDependency; - - @Test - public void givenInjectAnnotation_WhenOnField_ThenValidDependency() { - assertNotNull(fieldInjectDependency); - assertEquals("Arbitrary Dependency", fieldInjectDependency.toString()); - } -} diff --git a/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java b/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java deleted file mode 100644 index 0fd6a0e4c1..0000000000 --- a/spring-di/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.inject; - -import com.baeldung.configuration.ApplicationContextTestInjectQualifier; -import com.baeldung.dependency.ArbitraryDependency; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -import javax.inject.Inject; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, - classes = ApplicationContextTestInjectQualifier.class) -public class FieldQualifierInjectIntegrationTest { - - @Inject - @Qualifier("defaultFile") - private ArbitraryDependency defaultDependency; - - @Inject - @Qualifier("namedFile") - private ArbitraryDependency namedDependency; - - @Test - public void givenInjectQualifier_WhenOnField_ThenDefaultFileValid() { - assertNotNull(defaultDependency); - assertEquals("Arbitrary Dependency", defaultDependency.toString()); - } - - @Test - public void givenInjectQualifier_WhenOnField_ThenNamedFileValid() { - assertNotNull(defaultDependency); - assertEquals("Another Arbitrary Dependency", namedDependency.toString()); - } -} From f3c3086b0793c88cc1c10dfae9a59f558fc1c831 Mon Sep 17 00:00:00 2001 From: sampadawagde Date: Wed, 15 Jul 2020 17:31:47 +0530 Subject: [PATCH 12/18] JAVA-628: Moved 3 articles to spring-di-2, added README --- spring-di-2/README.md | 11 ++++ spring-di-2/pom.xml | 16 +++++ .../com/baeldung/collection/BaeldungBean.java | 18 ++++++ .../baeldung/collection/CollectionConfig.java | 50 +++++++++++++++ .../collection/CollectionInjectionDemo.java | 21 +++++++ .../baeldung/collection/CollectionsBean.java | 62 +++++++++++++++++++ .../AnotherArbitraryDependency.java | 13 ++++ .../dependency/ArbitraryDependency.java | 13 ++++ .../YetAnotherArbitraryDependency.java | 13 ++++ .../staticvalue/injection/Application.java | 17 +++++ .../injection/PropertyController.java | 30 +++++++++ .../src/main/resources/application.properties | 1 + .../ApplicationContextTestAutowiredName.java | 9 +++ ...licationContextTestAutowiredQualifier.java | 25 ++++++++ .../ApplicationContextTestAutowiredType.java | 16 +++++ .../ApplicationContextTestInjectName.java | 17 +++++ ...ApplicationContextTestInjectQualifier.java | 23 +++++++ .../ApplicationContextTestInjectType.java | 16 +++++ ...pplicationContextTestResourceNameType.java | 16 +++++ ...plicationContextTestResourceQualifier.java | 22 +++++++ .../FieldAutowiredIntegrationTest.java | 30 +++++++++ .../FieldAutowiredNameIntegrationTest.java | 30 +++++++++ ...ieldQualifierAutowiredIntegrationTest.java | 42 +++++++++++++ .../FieldByNameInjectIntegrationTest.java | 33 ++++++++++ .../inject/FieldInjectIntegrationTest.java | 31 ++++++++++ .../FieldQualifierInjectIntegrationTest.java | 42 +++++++++++++ ...FieldResourceInjectionIntegrationTest.java | 32 ++++++++++ ...hodByQualifierResourceIntegrationTest.java | 46 ++++++++++++++ .../MethodByTypeResourceIntegrationTest.java | 35 +++++++++++ ...ethodResourceInjectionIntegrationTest.java | 35 +++++++++++ .../NamedResourceIntegrationTest.java | 30 +++++++++ ...ifierResourceInjectionIntegrationTest.java | 43 +++++++++++++ ...etterResourceInjectionIntegrationTest.java | 34 ++++++++++ 33 files changed, 872 insertions(+) create mode 100644 spring-di-2/README.md create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java create mode 100644 spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java create mode 100644 spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java create mode 100644 spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java create mode 100644 spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java create mode 100644 spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java create mode 100644 spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java create mode 100644 spring-di-2/src/main/resources/application.properties create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java create mode 100644 spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java diff --git a/spring-di-2/README.md b/spring-di-2/README.md new file mode 100644 index 0000000000..15249efa7c --- /dev/null +++ b/spring-di-2/README.md @@ -0,0 +1,11 @@ +## Spring Dependency Injection + +This module contains articles about dependency injection with Spring + +### Relevant Articles + +- [Injecting Spring Beans into Unmanaged Objects](https://www.baeldung.com/spring-inject-bean-into-unmanaged-objects) +- [Injecting a Value in a Static Field in Spring](https://www.baeldung.com/spring-inject-static-field) +- [Spring – Injecting Collections](https://www.baeldung.com/spring-injecting-collections) +- [Wiring in Spring: @Autowired, @Resource and @Inject](https://www.baeldung.com/spring-annotations-resource-inject-autowire) +- More articles: [[<-- prev]](/spring-di) \ No newline at end of file diff --git a/spring-di-2/pom.xml b/spring-di-2/pom.xml index 9b703d55d9..4dd92ca18c 100644 --- a/spring-di-2/pom.xml +++ b/spring-di-2/pom.xml @@ -25,11 +25,26 @@ spring-boot-starter-data-jpa ${spring-boot.version} + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + org.springframework spring-aspects ${spring.version} + + org.projectlombok + lombok + ${lombok.version} + + + javax.inject + javax.inject + ${javax.inject.version} + @@ -61,5 +76,6 @@ 2.3.1.RELEASE 1.11 + 1 \ No newline at end of file diff --git a/spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java b/spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java new file mode 100644 index 0000000000..6d7351df02 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/BaeldungBean.java @@ -0,0 +1,18 @@ +package com.baeldung.collection; + +/** + * Created by Gebruiker on 5/22/2018. + */ +public class BaeldungBean { + + private String name; + + public BaeldungBean(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java b/spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java new file mode 100644 index 0000000000..fbae2963e5 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/CollectionConfig.java @@ -0,0 +1,50 @@ +package com.baeldung.collection; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; + +import java.util.*; + +@Configuration +public class CollectionConfig { + + @Bean + public CollectionsBean getCollectionsBean() { + return new CollectionsBean(new HashSet<>(Arrays.asList("John", "Adam", "Harry"))); + } + + @Bean + public List nameList(){ + return Arrays.asList("John", "Adam", "Harry", null); + } + + @Bean + public Map nameMap(){ + Map nameMap = new HashMap<>(); + nameMap.put(1, "John"); + nameMap.put(2, "Adam"); + nameMap.put(3, "Harry"); + return nameMap; + } + + @Bean + @Qualifier("CollectionsBean") + @Order(2) + public BaeldungBean getElement() { + return new BaeldungBean("John"); + } + + @Bean + @Order(3) + public BaeldungBean getAnotherElement() { + return new BaeldungBean("Adam"); + } + + @Bean + @Order(1) + public BaeldungBean getOneMoreElement() { + return new BaeldungBean("Harry"); + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java b/spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java new file mode 100644 index 0000000000..2ee265f134 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/CollectionInjectionDemo.java @@ -0,0 +1,21 @@ +package com.baeldung.collection; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * Created by Gebruiker on 5/18/2018. + */ +public class CollectionInjectionDemo { + + public static void main(String[] args) { + + ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class); + CollectionsBean collectionsBean = context.getBean(CollectionsBean.class); + collectionsBean.printNameList(); + collectionsBean.printNameSet(); + collectionsBean.printNameMap(); + collectionsBean.printBeanList(); + collectionsBean.printNameListWithDefaults(); + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java b/spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java new file mode 100644 index 0000000000..fc90f2c6ff --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/collection/CollectionsBean.java @@ -0,0 +1,62 @@ +package com.baeldung.collection; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; + +/** + * Created by Gebruiker on 5/18/2018. + */ +public class CollectionsBean { + + @Autowired + private List nameList; + + private Set nameSet; + + private Map nameMap; + + @Autowired(required = false) + @Qualifier("CollectionsBean") + private List beanList = new ArrayList<>(); + + @Value("${names.list:}#{T(java.util.Collections).emptyList()}") + private List nameListWithDefaultValue; + + public CollectionsBean() { + } + + public CollectionsBean(Set strings) { + this.nameSet = strings; + } + + @Autowired + public void setNameMap(Map nameMap) { + this.nameMap = nameMap; + } + + public void printNameList() { + System.out.println(nameList); + } + + public void printNameSet() { + System.out.println(nameSet); + } + + public void printNameMap() { + System.out.println(nameMap); + } + + public void printBeanList() { + System.out.println(beanList); + } + + public void printNameListWithDefaults() { + System.out.println(nameListWithDefaultValue); + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java new file mode 100644 index 0000000000..0e19523b7e --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java @@ -0,0 +1,13 @@ +package com.baeldung.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class AnotherArbitraryDependency extends ArbitraryDependency { + + private final String label = "Another Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java b/spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java new file mode 100644 index 0000000000..3c90492d2c --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/dependency/ArbitraryDependency.java @@ -0,0 +1,13 @@ +package com.baeldung.dependency; + +import org.springframework.stereotype.Component; + +@Component(value = "autowiredFieldDependency") +public class ArbitraryDependency { + + private final String label = "Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java new file mode 100644 index 0000000000..a88abd0924 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java @@ -0,0 +1,13 @@ +package com.baeldung.dependency; + +import org.springframework.stereotype.Component; + +@Component +public class YetAnotherArbitraryDependency extends ArbitraryDependency { + + private final String label = "Yet Another Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java new file mode 100644 index 0000000000..b4222ddcc9 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/Application.java @@ -0,0 +1,17 @@ +package com.baeldung.staticvalue.injection; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.PropertySource; + +@SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) +@PropertySource("/application.properties") + +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java new file mode 100644 index 0000000000..f5910ea4f8 --- /dev/null +++ b/spring-di-2/src/main/java/com/baeldung/staticvalue/injection/PropertyController.java @@ -0,0 +1,30 @@ +package com.baeldung.staticvalue.injection; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.List; + +@RestController +public class PropertyController { + + @Value("${name}") + private String name; + + @Value("${name}") + private static String NAME_NULL; + + private static String NAME_STATIC; + + @Value("${name}") + public void setNameStatic(String name){ + PropertyController.NAME_STATIC = name; + } + + @GetMapping("/properties") + public List getProperties(){ + return Arrays.asList(this.name, NAME_STATIC, NAME_NULL) ; + } +} diff --git a/spring-di-2/src/main/resources/application.properties b/spring-di-2/src/main/resources/application.properties new file mode 100644 index 0000000000..828fa9cd2a --- /dev/null +++ b/spring-di-2/src/main/resources/application.properties @@ -0,0 +1 @@ +name = Inject a value to a static field diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java new file mode 100644 index 0000000000..3046e68829 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredName.java @@ -0,0 +1,9 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = {"com.baeldung.dependency"}) +public class ApplicationContextTestAutowiredName { +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java new file mode 100644 index 0000000000..33969ea69d --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredQualifier.java @@ -0,0 +1,25 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.AnotherArbitraryDependency; +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestAutowiredQualifier { + + @Bean + public ArbitraryDependency autowiredFieldDependency() { + ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); + + return autowiredFieldDependency; + } + + @Bean + public ArbitraryDependency anotherAutowiredFieldDependency() { + ArbitraryDependency anotherAutowiredFieldDependency = new AnotherArbitraryDependency(); + + return anotherAutowiredFieldDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java new file mode 100644 index 0000000000..24cdd978e4 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestAutowiredType.java @@ -0,0 +1,16 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestAutowiredType { + + @Bean + public ArbitraryDependency autowiredFieldDependency() { + ArbitraryDependency autowiredFieldDependency = new ArbitraryDependency(); + return autowiredFieldDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java new file mode 100644 index 0000000000..cb465d0183 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectName.java @@ -0,0 +1,17 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.dependency.YetAnotherArbitraryDependency; + +@Configuration +public class ApplicationContextTestInjectName { + + @Bean + public ArbitraryDependency yetAnotherFieldInjectDependency() { + ArbitraryDependency yetAnotherFieldInjectDependency = new YetAnotherArbitraryDependency(); + return yetAnotherFieldInjectDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java new file mode 100644 index 0000000000..c2a63dac9e --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectQualifier.java @@ -0,0 +1,23 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.AnotherArbitraryDependency; +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestInjectQualifier { + + @Bean + public ArbitraryDependency defaultFile() { + ArbitraryDependency defaultFile = new ArbitraryDependency(); + return defaultFile; + } + + @Bean + public ArbitraryDependency namedFile() { + ArbitraryDependency namedFile = new AnotherArbitraryDependency(); + return namedFile; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java new file mode 100644 index 0000000000..15a75b8f2d --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestInjectType.java @@ -0,0 +1,16 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.dependency.ArbitraryDependency; + +@Configuration +public class ApplicationContextTestInjectType { + + @Bean + public ArbitraryDependency injectDependency() { + ArbitraryDependency injectDependency = new ArbitraryDependency(); + return injectDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java new file mode 100644 index 0000000000..708ade7647 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceNameType.java @@ -0,0 +1,16 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.File; + +@Configuration +public class ApplicationContextTestResourceNameType { + + @Bean(name = "namedFile") + public File namedFile() { + File namedFile = new File("namedFile.txt"); + return namedFile; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java new file mode 100644 index 0000000000..87864b183e --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/ApplicationContextTestResourceQualifier.java @@ -0,0 +1,22 @@ +package com.baeldung.wiring.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.File; + +@Configuration +public class ApplicationContextTestResourceQualifier { + + @Bean(name = "defaultFile") + public File defaultFile() { + File defaultFile = new File("defaultFile.txt"); + return defaultFile; + } + + @Bean(name = "namedFile") + public File namedFile() { + File namedFile = new File("namedFile.txt"); + return namedFile; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java new file mode 100644 index 0000000000..f3f065ed4d --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredIntegrationTest.java @@ -0,0 +1,30 @@ +package com.baeldung.wiring.configuration.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestAutowiredType; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestAutowiredType.class) +public class FieldAutowiredIntegrationTest { + + @Autowired + private ArbitraryDependency fieldDependency; + + @Test + public void givenAutowired_WhenSetOnField_ThenDependencyResolved() { + assertNotNull(fieldDependency); + assertEquals("Arbitrary Dependency", fieldDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java new file mode 100644 index 0000000000..199241c7e2 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldAutowiredNameIntegrationTest.java @@ -0,0 +1,30 @@ +package com.baeldung.wiring.configuration.autowired; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestAutowiredName; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestAutowiredName.class) +public class FieldAutowiredNameIntegrationTest { + + @Autowired + private ArbitraryDependency autowiredFieldDependency; + + @Test + public void givenAutowiredAnnotation_WhenOnField_ThenDependencyValid() { + assertNotNull(autowiredFieldDependency); + assertEquals("Arbitrary Dependency", autowiredFieldDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java new file mode 100644 index 0000000000..081fbf24ad --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/autowired/FieldQualifierAutowiredIntegrationTest.java @@ -0,0 +1,42 @@ +package com.baeldung.wiring.configuration.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestAutowiredQualifier; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestAutowiredQualifier.class) +public class FieldQualifierAutowiredIntegrationTest { + + @Autowired + @Qualifier("autowiredFieldDependency") + private ArbitraryDependency fieldDependency1; + + @Autowired + @Qualifier("anotherAutowiredFieldDependency") + private ArbitraryDependency fieldDependency2; + + @Test + public void givenAutowiredQualifier_WhenOnField_ThenDep1Valid() { + assertNotNull(fieldDependency1); + assertEquals("Arbitrary Dependency", fieldDependency1.toString()); + } + + @Test + public void givenAutowiredQualifier_WhenOnField_ThenDep2Valid() { + assertNotNull(fieldDependency2); + assertEquals("Another Arbitrary Dependency", fieldDependency2.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java new file mode 100644 index 0000000000..d1a75d73ea --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldByNameInjectIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.wiring.configuration.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestInjectName; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestInjectName.class) +public class FieldByNameInjectIntegrationTest { + + @Inject + @Named("yetAnotherFieldInjectDependency") + private ArbitraryDependency yetAnotherFieldInjectDependency; + + @Test + public void givenInjectQualifier_WhenSetOnField_ThenDependencyValid() { + assertNotNull(yetAnotherFieldInjectDependency); + assertEquals("Yet Another Arbitrary Dependency", yetAnotherFieldInjectDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java new file mode 100644 index 0000000000..995f560701 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldInjectIntegrationTest.java @@ -0,0 +1,31 @@ +package com.baeldung.wiring.configuration.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestInjectType; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestInjectType.class) +public class FieldInjectIntegrationTest { + + @Inject + private ArbitraryDependency fieldInjectDependency; + + @Test + public void givenInjectAnnotation_WhenOnField_ThenValidDependency() { + assertNotNull(fieldInjectDependency); + assertEquals("Arbitrary Dependency", fieldInjectDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java new file mode 100644 index 0000000000..67fa2bf3d4 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/inject/FieldQualifierInjectIntegrationTest.java @@ -0,0 +1,42 @@ +package com.baeldung.wiring.configuration.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.dependency.ArbitraryDependency; +import com.baeldung.wiring.configuration.ApplicationContextTestInjectQualifier; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestInjectQualifier.class) +public class FieldQualifierInjectIntegrationTest { + + @Inject + @Qualifier("defaultFile") + private ArbitraryDependency defaultDependency; + + @Inject + @Qualifier("namedFile") + private ArbitraryDependency namedDependency; + + @Test + public void givenInjectQualifier_WhenOnField_ThenDefaultFileValid() { + assertNotNull(defaultDependency); + assertEquals("Arbitrary Dependency", defaultDependency.toString()); + } + + @Test + public void givenInjectQualifier_WhenOnField_ThenNamedFileValid() { + assertNotNull(defaultDependency); + assertEquals("Another Arbitrary Dependency", namedDependency.toString()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..938d557939 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/FieldResourceInjectionIntegrationTest.java @@ -0,0 +1,32 @@ +package com.baeldung.wiring.configuration.resource; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class FieldResourceInjectionIntegrationTest { + + @Resource(name = "namedFile") + private File defaultFile; + + @Test + public void givenResourceAnnotation_WhenOnField_ThenDependencyValid() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java new file mode 100644 index 0000000000..f49bf70aba --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByQualifierResourceIntegrationTest.java @@ -0,0 +1,46 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceQualifier; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceQualifier.class) +public class MethodByQualifierResourceIntegrationTest { + + private File arbDependency; + private File anotherArbDependency; + + @Test + public void givenResourceQualifier_WhenSetter_ThenValidDependencies() { + assertNotNull(arbDependency); + assertEquals("namedFile.txt", arbDependency.getName()); + assertNotNull(anotherArbDependency); + assertEquals("defaultFile.txt", anotherArbDependency.getName()); + } + + @Resource + @Qualifier("namedFile") + public void setArbDependency(File arbDependency) { + this.arbDependency = arbDependency; + } + + @Resource + @Qualifier("defaultFile") + public void setAnotherArbDependency(File anotherArbDependency) { + this.anotherArbDependency = anotherArbDependency; + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java new file mode 100644 index 0000000000..aecd02a1d5 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodByTypeResourceIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class MethodByTypeResourceIntegrationTest { + + private File defaultFile; + + @Resource + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void givenResourceAnnotation_WhenSetter_ThenValidDependency() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..4ef9368c28 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/MethodResourceInjectionIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class MethodResourceInjectionIntegrationTest { + + private File defaultFile; + + @Resource(name = "namedFile") + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void givenResourceAnnotation_WhenSetter_ThenDependencyValid() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java new file mode 100644 index 0000000000..4339194f63 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/NamedResourceIntegrationTest.java @@ -0,0 +1,30 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class NamedResourceIntegrationTest { + + @Resource(name = "namedFile") + private File testFile; + + @Test + public void givenResourceAnnotation_WhenOnField_THEN_DEPENDENCY_Found() { + assertNotNull(testFile); + assertEquals("namedFile.txt", testFile.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..cc8c669757 --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/QualifierResourceInjectionIntegrationTest.java @@ -0,0 +1,43 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceQualifier; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration( + loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceQualifier.class) +public class QualifierResourceInjectionIntegrationTest { + + @Resource + @Qualifier("defaultFile") + private File dependency1; + + @Resource + @Qualifier("namedFile") + private File dependency2; + + @Test + public void givenResourceAnnotation_WhenField_ThenDependency1Valid() { + assertNotNull(dependency1); + assertEquals("defaultFile.txt", dependency1.getName()); + } + + @Test + public void givenResourceQualifier_WhenField_ThenDependency2Valid() { + assertNotNull(dependency2); + assertEquals("namedFile.txt", dependency2.getName()); + } +} diff --git a/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java new file mode 100644 index 0000000000..90c8677bff --- /dev/null +++ b/spring-di-2/src/test/java/com/baeldung/wiring/configuration/resource/SetterResourceInjectionIntegrationTest.java @@ -0,0 +1,34 @@ +package com.baeldung.wiring.configuration.resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.wiring.configuration.ApplicationContextTestResourceNameType; + +import javax.annotation.Resource; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class, + classes = ApplicationContextTestResourceNameType.class) +public class SetterResourceInjectionIntegrationTest { + + private File defaultFile; + + @Resource + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void givenResourceAnnotation_WhenOnSetter_THEN_MUST_INJECT_Dependency() { + assertNotNull(defaultFile); + assertEquals("namedFile.txt", defaultFile.getName()); + } +} From 7015c666912301c80cff0e181ad3f44bda117f72 Mon Sep 17 00:00:00 2001 From: mikr Date: Wed, 15 Jul 2020 22:12:07 +0200 Subject: [PATCH 13/18] JAVA-38 Move all Spring Cloud Modules to Boot 2 --- parent-boot-2/pom.xml | 1 + spring-cloud/pom.xml | 26 +++++++++---------- .../discovery/DiscoveryClientApplication.java | 4 ++- .../health/ServiceDiscoveryApplication.java | 5 +++- .../DistributedPropertiesApplication.java | 4 ++- .../feign-rest-consumer/pom.xml | 4 +++ .../hystrix/rest/consumer/GreetingClient.java | 2 +- .../RestConsumerFeignApplication.java | 2 +- ...putsServiceApplicationIntegrationTest.java | 6 ++--- ...sWithConditionsServiceIntegrationTest.java | 6 ++--- .../MyLoggerApplicationIntegrationTest.java | 2 +- .../spring-cloud-zookeeper/Greeting/pom.xml | 10 +++++-- .../cloud/greeting/HelloWorldClient.java | 4 +-- spring-cloud/spring-cloud-zookeeper/pom.xml | 3 +-- 14 files changed, 47 insertions(+), 32 deletions(-) diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index ab5424bfaf..ed0f327b8c 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -31,6 +31,7 @@ io.rest-assured rest-assured + ${rest-assured.version} org.springframework.boot diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 6fddb1693f..0e2cac1ff9 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -10,9 +10,9 @@ com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 @@ -56,17 +56,15 @@ - 1.2.2.RELEASE - Brixton.SR7 - 1.2.2.RELEASE - 1.2.2.RELEASE - 2.0.2.RELEASE - 1.4.6.RELEASE - 1.2.3.RELEASE - 1.3.0.RELEASE - 1.4.2.RELEASE - 1.4.2.RELEASE - 1.2.3.RELEASE + Hoxton.SR4 + 2.2.3.RELEASE + 2.2.3.RELEASE + 1.4.7.RELEASE + 1.4.7.RELEASE + 1.4.7.RELEASE + 3.0.6.RELEASE + 2.3.1.RELEASE + 2.3.1.RELEASE diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/discovery/DiscoveryClientApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/discovery/DiscoveryClientApplication.java index d013969ad3..e01799b8d9 100644 --- a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/discovery/DiscoveryClientApplication.java +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/discovery/DiscoveryClientApplication.java @@ -4,12 +4,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import static org.springframework.boot.WebApplicationType.NONE; + @SpringBootApplication @EnableDiscoveryClient public class DiscoveryClientApplication { public static void main(String[] args) { - new SpringApplicationBuilder(DiscoveryClientApplication.class).web(true) + new SpringApplicationBuilder(DiscoveryClientApplication.class).web(NONE) .run(args); } diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/health/ServiceDiscoveryApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/health/ServiceDiscoveryApplication.java index 020d7d017c..1ef3e34e08 100644 --- a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/health/ServiceDiscoveryApplication.java +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/health/ServiceDiscoveryApplication.java @@ -1,13 +1,16 @@ package com.baeldung.spring.cloud.consul.health; +import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; +import static org.springframework.boot.WebApplicationType.NONE; + @SpringBootApplication public class ServiceDiscoveryApplication { public static void main(String[] args) { - new SpringApplicationBuilder(ServiceDiscoveryApplication.class).web(true) + new SpringApplicationBuilder(ServiceDiscoveryApplication.class).web(NONE) .run(args); } diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/DistributedPropertiesApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/DistributedPropertiesApplication.java index c1d2b0acc5..d854b5aaba 100644 --- a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/DistributedPropertiesApplication.java +++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/DistributedPropertiesApplication.java @@ -4,12 +4,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.web.bind.annotation.RestController; +import static org.springframework.boot.WebApplicationType.NONE; + @SpringBootApplication @RestController public class DistributedPropertiesApplication { public static void main(String[] args) { - new SpringApplicationBuilder(DistributedPropertiesApplication.class).web(true) + new SpringApplicationBuilder(DistributedPropertiesApplication.class).web(NONE) .run(args); } diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml index 367b7c111e..acb9993881 100644 --- a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml @@ -36,18 +36,22 @@ org.springframework.cloud spring-cloud-starter-hystrix + ${spring-cloud-starter-hystrix.version} org.springframework.cloud spring-cloud-starter-hystrix-dashboard + ${spring-cloud-starter-hystrix.version} org.springframework.cloud spring-cloud-starter-feign + ${spring-cloud-starter-feign.version} org.springframework.boot spring-boot-starter-web + ${spring-boot-starter-web.version} org.springframework.boot diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java index 4fcfb0eeda..2a31917352 100644 --- a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java @@ -1,7 +1,7 @@ package com.baeldung.spring.cloud.hystrix.rest.consumer; import com.baeldung.spring.cloud.hystrix.rest.producer.GreetingController; -import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PathVariable; diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java index 2fc54216fe..044b0dbcb8 100644 --- a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java @@ -3,8 +3,8 @@ package com.baeldung.spring.cloud.hystrix.rest.consumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; -import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableCircuitBreaker diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationIntegrationTest.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationIntegrationTest.java index 898d06897f..c8b8c9f1a9 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationIntegrationTest.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsServiceApplicationIntegrationTest.java @@ -28,13 +28,13 @@ public class MultipleOutputsServiceApplicationIntegrationTest { @Test public void whenSendMessage_thenResponseIsInAOutput() { whenSendMessage(1); - thenPayloadInChannelIs(pipe.anOutput(), 1); + thenPayloadInChannelIs(pipe.anOutput(), "1"); } @Test public void whenSendMessage_thenResponseIsInAnotherOutput() { whenSendMessage(11); - thenPayloadInChannelIs(pipe.anotherOutput(), 11); + thenPayloadInChannelIs(pipe.anotherOutput(), "11"); } private void whenSendMessage(Integer val) { @@ -43,7 +43,7 @@ public class MultipleOutputsServiceApplicationIntegrationTest { .build()); } - private void thenPayloadInChannelIs(MessageChannel channel, Integer expectedValue) { + private void thenPayloadInChannelIs(MessageChannel channel, String expectedValue) { Object payload = messageCollector.forChannel(channel) .poll() .getPayload(); diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceIntegrationTest.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceIntegrationTest.java index c3bf5a1205..1aa8d38aa1 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceIntegrationTest.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MultipleOutputsWithConditionsServiceIntegrationTest.java @@ -28,13 +28,13 @@ public class MultipleOutputsWithConditionsServiceIntegrationTest { @Test public void whenSendMessage_thenResponseIsInAOutput() { whenSendMessage(1); - thenPayloadInChannelIs(pipe.anOutput(), 1); + thenPayloadInChannelIs(pipe.anOutput(), "1"); } @Test public void whenSendMessage_thenResponseIsInAnotherOutput() { whenSendMessage(11); - thenPayloadInChannelIs(pipe.anotherOutput(), 11); + thenPayloadInChannelIs(pipe.anotherOutput(), "11"); } private void whenSendMessage(Integer val) { @@ -43,7 +43,7 @@ public class MultipleOutputsWithConditionsServiceIntegrationTest { .build()); } - private void thenPayloadInChannelIs(MessageChannel channel, Integer expectedValue) { + private void thenPayloadInChannelIs(MessageChannel channel, String expectedValue) { Object payload = messageCollector.forChannel(channel) .poll() .getPayload(); diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationIntegrationTest.java b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationIntegrationTest.java index 21d84e79e0..7e5f4fbec7 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationIntegrationTest.java +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-rabbit/src/test/java/com/baeldung/spring/cloud/stream/rabbit/MyLoggerApplicationIntegrationTest.java @@ -35,6 +35,6 @@ public class MyLoggerApplicationIntegrationTest { .poll() .getPayload(); - assertEquals("[1]: This is my message", payload.toString()); + assertEquals("{\"message\":\"[1]: This is my message\"}", payload.toString()); } } diff --git a/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml b/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml index ac469d8bc4..871218e78c 100644 --- a/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml +++ b/spring-cloud/spring-cloud-zookeeper/Greeting/pom.xml @@ -30,6 +30,10 @@ spring-boot-starter ${spring-boot.version} + + org.springframework.boot + spring-boot-starter-web + org.springframework spring-web @@ -56,7 +60,10 @@ spring-cloud-starter-feign ${spring-cloud-starter-feign.version} - + + org.springframework.cloud + spring-cloud-starter-openfeign + org.springframework.boot spring-boot-starter-test @@ -71,7 +78,6 @@ - 1.2.5.RELEASE 1.3 diff --git a/spring-cloud/spring-cloud-zookeeper/Greeting/src/main/java/com/baeldung/spring/cloud/greeting/HelloWorldClient.java b/spring-cloud/spring-cloud-zookeeper/Greeting/src/main/java/com/baeldung/spring/cloud/greeting/HelloWorldClient.java index c56cb1907a..dc90576e08 100644 --- a/spring-cloud/spring-cloud-zookeeper/Greeting/src/main/java/com/baeldung/spring/cloud/greeting/HelloWorldClient.java +++ b/spring-cloud/spring-cloud-zookeeper/Greeting/src/main/java/com/baeldung/spring/cloud/greeting/HelloWorldClient.java @@ -2,8 +2,8 @@ package com.baeldung.spring.cloud.greeting; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.netflix.feign.EnableFeignClients; -import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/spring-cloud/spring-cloud-zookeeper/pom.xml b/spring-cloud/spring-cloud-zookeeper/pom.xml index 64d30b19a6..244ccbd957 100644 --- a/spring-cloud/spring-cloud-zookeeper/pom.xml +++ b/spring-cloud/spring-cloud-zookeeper/pom.xml @@ -18,8 +18,7 @@ - 1.5.2.RELEASE - 4.3.7.RELEASE + 5.2.7.RELEASE 1.0.3.RELEASE From 9cf9cf91a2454a0a3e20df17ae3d222575e80138 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Fri, 17 Jul 2020 17:06:50 +0200 Subject: [PATCH 14/18] BAEL-3275: Convert RedisMessageListenerIntegrationTest to a SpringBootTest (#9717) --- .../data/redis/SpringRedisApplication.java | 13 +++++++ .../RedisMessageListenerIntegrationTest.java | 34 ++++++++----------- 2 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/SpringRedisApplication.java diff --git a/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/SpringRedisApplication.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/SpringRedisApplication.java new file mode 100644 index 0000000000..82c06f803b --- /dev/null +++ b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/SpringRedisApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.data.redis; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringRedisApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringRedisApplication.class, args); + } + +} diff --git a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java index 6f9e6a8757..6501f3f9f0 100644 --- a/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java @@ -1,44 +1,40 @@ package com.baeldung.spring.data.redis; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.UUID; - +import com.baeldung.spring.data.redis.queue.RedisMessagePublisher; +import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import com.baeldung.spring.data.redis.config.RedisConfig; -import com.baeldung.spring.data.redis.queue.RedisMessagePublisher; -import com.baeldung.spring.data.redis.queue.RedisMessageSubscriber; - +import org.springframework.test.context.junit4.SpringRunner; import redis.embedded.RedisServerBuilder; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = RedisConfig.class) +import java.util.UUID; + +import static org.junit.Assert.assertTrue; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = SpringRedisApplication.class) @DirtiesContext(classMode = ClassMode.BEFORE_CLASS) public class RedisMessageListenerIntegrationTest { private static redis.embedded.RedisServer redisServer; - + @Autowired private RedisMessagePublisher redisMessagePublisher; - + @BeforeClass - public static void startRedisServer() throws IOException { + public static void startRedisServer() { redisServer = new RedisServerBuilder().port(6379).setting("maxmemory 256M").build(); redisServer.start(); } - + @AfterClass - public static void stopRedisServer() throws IOException { + public static void stopRedisServer() { redisServer.stop(); } From d752f841ff0dad8e5028d7b3c0d9dd4d61390a5e Mon Sep 17 00:00:00 2001 From: Maiklins Date: Sat, 18 Jul 2020 14:57:09 +0200 Subject: [PATCH 15/18] JAVA-2114 Split or move hibernate JPA module (#9713) Co-authored-by: mikr --- persistence-modules/hibernate-exceptions/README.md | 2 ++ persistence-modules/hibernate-jpa/README.md | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/persistence-modules/hibernate-exceptions/README.md b/persistence-modules/hibernate-exceptions/README.md index c2014a3c91..616800a63d 100644 --- a/persistence-modules/hibernate-exceptions/README.md +++ b/persistence-modules/hibernate-exceptions/README.md @@ -1,3 +1,5 @@ ### Relevant Articles: - [Hibernate could not initialize proxy – no Session](https://www.baeldung.com/hibernate-initialize-proxy-exception) +- [Hibernate Error “No Persistence Provider for EntityManager”](https://www.baeldung.com/hibernate-no-persistence-provider) +- [TransactionRequiredException Error](https://www.baeldung.com/jpa-transaction-required-exception) \ No newline at end of file diff --git a/persistence-modules/hibernate-jpa/README.md b/persistence-modules/hibernate-jpa/README.md index 514fcedb8a..64ec9dcae3 100644 --- a/persistence-modules/hibernate-jpa/README.md +++ b/persistence-modules/hibernate-jpa/README.md @@ -11,7 +11,5 @@ This module contains articles specific to use of Hibernate as a JPA implementati - [Criteria API – An Example of IN Expressions](https://www.baeldung.com/jpa-criteria-api-in-expressions) - [One-to-One Relationship in JPA](https://www.baeldung.com/jpa-one-to-one) - [Enabling Transaction Locks in Spring Data JPA](https://www.baeldung.com/java-jpa-transaction-locks) -- [TransactionRequiredException Error](https://www.baeldung.com/jpa-transaction-required-exception) - [JPA/Hibernate Persistence Context](https://www.baeldung.com/jpa-hibernate-persistence-context) - [Quick Guide to EntityManager#getReference()](https://www.baeldung.com/jpa-entity-manager-get-reference) -- [Hibernate Error “No Persistence Provider for EntityManager”](https://www.baeldung.com/hibernate-no-persistence-provider) From 2e118afd7433023d59f6b02b30b19e1df2c14ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dupire?= Date: Sun, 19 Jul 2020 14:38:02 +0200 Subject: [PATCH 16/18] [JAVA-1670] Follow-up fixes (#9725) * Removed junit-platform version overriding from spring-boot-client * Removed junit version overriding from spring-boot-with-starter-parent --- spring-boot-modules/spring-boot-client/pom.xml | 1 - .../spring-boot-parent/spring-boot-with-starter-parent/pom.xml | 2 -- 2 files changed, 3 deletions(-) diff --git a/spring-boot-modules/spring-boot-client/pom.xml b/spring-boot-modules/spring-boot-client/pom.xml index a7737be106..aa832497e9 100644 --- a/spring-boot-modules/spring-boot-client/pom.xml +++ b/spring-boot-modules/spring-boot-client/pom.xml @@ -116,7 +116,6 @@ 18.0 - 1.2.0 2.2.4 diff --git a/spring-boot-modules/spring-boot-parent/spring-boot-with-starter-parent/pom.xml b/spring-boot-modules/spring-boot-parent/spring-boot-with-starter-parent/pom.xml index 7413492d7f..108e66b68e 100644 --- a/spring-boot-modules/spring-boot-parent/spring-boot-with-starter-parent/pom.xml +++ b/spring-boot-modules/spring-boot-parent/spring-boot-with-starter-parent/pom.xml @@ -41,7 +41,5 @@ 1.8 2.2.5.RELEASE - 4.11 - From ca8eee9359d4b5f1a9e16c3ad009aa889a45faaf Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Sun, 19 Jul 2020 18:32:17 +0530 Subject: [PATCH 17/18] JAVA-2160 Add modules in main pom build (#9726) * add modules in main pom build * add modules in main pom build --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index f5409d60c4..9d9c448887 100644 --- a/pom.xml +++ b/pom.xml @@ -386,6 +386,7 @@ core-java-modules core-kotlin-modules + core-scala couchbase custom-pmd @@ -559,6 +560,7 @@ atomikos reactive-systems + slack @@ -707,6 +709,7 @@ spring-rest-shell spring-rest-simple spring-resttemplate + spring-resttemplate-2 spring-rest-testing spring-roo @@ -901,6 +904,7 @@ core-java-modules core-kotlin-modules + core-scala couchbase custom-pmd @@ -1071,6 +1075,7 @@ atomikos reactive-systems + slack @@ -1211,6 +1216,7 @@ spring-rest-shell spring-rest-simple spring-resttemplate + spring-resttemplate-2 spring-rest-testing spring-roo From cbdebb76adb9a2efe3280285dac971c41c983eac Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Sun, 19 Jul 2020 20:13:14 +0530 Subject: [PATCH 18/18] BAEL-4094: Code example for Spring ApplicationContext article (#9656) --- spring-core-4/pom.xml | 16 +++++ .../applicationcontext/AccountConfig.java | 28 ++++++++ .../applicationcontext/AccountRepository.java | 5 ++ .../applicationcontext/AccountService.java | 32 +++++++++ .../MyWebApplicationInitializer.java | 24 +++++++ .../MyXmlWebApplicationInitializer.java | 24 +++++++ .../applicationcontext/UserService.java | 10 +++ .../ApplicationContextUnitTest.java | 71 +++++++++++++++++++ .../account-bean-config.xml | 13 ++++ .../applicationcontext/user-bean-config.xml | 15 ++++ .../test/resources/config/messages.properties | 1 + 11 files changed, 239 insertions(+) create mode 100644 spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java create mode 100644 spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java create mode 100644 spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java create mode 100644 spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java create mode 100644 spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java create mode 100644 spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java create mode 100644 spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java create mode 100644 spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml create mode 100644 spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml create mode 100644 spring-core-4/src/test/resources/config/messages.properties diff --git a/spring-core-4/pom.xml b/spring-core-4/pom.xml index e5aee1f81d..df0b90fef2 100644 --- a/spring-core-4/pom.xml +++ b/spring-core-4/pom.xml @@ -24,6 +24,16 @@ spring-core ${spring.version} + + org.springframework + spring-web + ${spring.version} + + + org.springframework + spring-webmvc + ${spring.version} + org.springframework spring-expression @@ -69,6 +79,12 @@ ${assertj-core.version} test + + javax.servlet + javax.servlet-api + 4.0.0 + + diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java new file mode 100644 index 0000000000..d4c960bd68 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java @@ -0,0 +1,28 @@ +package com.baeldung.applicationcontext; + +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; + +@Configuration +public class AccountConfig { + + @Bean + public AccountService accountService() { + return new AccountService(accountRepository()); + } + + @Bean + public AccountRepository accountRepository() { + return new AccountRepository(); + } + + @Bean + public MessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("config/messages"); + return messageSource; + } + +} diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java new file mode 100644 index 0000000000..f15475acf3 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java @@ -0,0 +1,5 @@ +package com.baeldung.applicationcontext; + +public class AccountRepository { + +} diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java new file mode 100644 index 0000000000..c8b58915a8 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java @@ -0,0 +1,32 @@ +package com.baeldung.applicationcontext; + +import java.util.Locale; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; + +public class AccountService { + + @Autowired + private AccountRepository accountRepository; + + @Autowired + private MessageSource messageSource; + + public void setAccountRepository(AccountRepository accountRepository) { + this.accountRepository = accountRepository; + } + + public AccountRepository getAccountRepository() { + return accountRepository; + } + + public AccountService(AccountRepository accountRepository) { + this.accountRepository = accountRepository; + } + + public String getAccountName() { + return messageSource.getMessage("account.name", null, Locale.ENGLISH); + } + +} diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java new file mode 100644 index 0000000000..0296910311 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java @@ -0,0 +1,24 @@ +package com.baeldung.applicationcontext; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +public class MyWebApplicationInitializer implements WebApplicationInitializer { + + public void onStartup(ServletContext container) throws ServletException { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + context.register(AccountConfig.class); + context.setServletContext(container); + + ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(context)); + servlet.setLoadOnStartup(1); + + servlet.addMapping("/"); + } + +} diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java new file mode 100644 index 0000000000..fe681f1784 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java @@ -0,0 +1,24 @@ +package com.baeldung.applicationcontext; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.support.XmlWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +public class MyXmlWebApplicationInitializer implements WebApplicationInitializer { + + public void onStartup(ServletContext container) throws ServletException { + XmlWebApplicationContext context = new XmlWebApplicationContext(); + context.setConfigLocation("/WEB-INF/spring/applicationContext.xml"); + context.setServletContext(container); + + ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(context)); + servlet.setLoadOnStartup(1); + + servlet.addMapping("/"); + } + +} diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java new file mode 100644 index 0000000000..b63d6828a7 --- /dev/null +++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java @@ -0,0 +1,10 @@ +package com.baeldung.applicationcontext; + +import org.springframework.stereotype.Component; + +@Component +public class UserService { + + // user service code + +} diff --git a/spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java b/spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java new file mode 100644 index 0000000000..491d5dd9d0 --- /dev/null +++ b/spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java @@ -0,0 +1,71 @@ +package com.baeldung.applicationcontext; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.Ignore; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.context.support.FileSystemXmlApplicationContext; + +public class ApplicationContextUnitTest { + + @Test + public void givenAnnotationConfigAppContext_whenSpringConfig_thenMappingSuccess() { + ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class); + AccountService accountService = context.getBean(AccountService.class); + + assertNotNull(accountService); + assertNotNull(accountService.getAccountRepository()); + + ((AnnotationConfigApplicationContext) context).close(); + } + + @Test + public void givenClasspathXmlAppContext_whenAnnotationConfig_thenMappingSuccess() { + ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/user-bean-config.xml"); + UserService userService = context.getBean(UserService.class); + + assertNotNull(userService); + + ((ClassPathXmlApplicationContext) context).close(); + } + + @Test + @Ignore + public void givenFileXmlAppContext_whenXMLConfig_thenMappingSuccess() { + String path = "D:/workspaces/Baeldung/tutorials/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml"; + + ApplicationContext context = new FileSystemXmlApplicationContext(path); + AccountService accountService = context.getBean("accountService", AccountService.class); + + assertNotNull(accountService); + assertNotNull(accountService.getAccountRepository()); + + ((FileSystemXmlApplicationContext) context).close(); + } + + @Test + public void givenClasspathXmlAppContext_whenXMLConfig_thenMappingSuccess() { + ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/account-bean-config.xml"); + AccountService accountService = context.getBean("accountService", AccountService.class); + + assertNotNull(accountService); + assertNotNull(accountService.getAccountRepository()); + + ((ClassPathXmlApplicationContext) context).close(); + } + + @Test + public void givenMessagesInFile_whenMessageResourceUsed_thenReadMessage() { + ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class); + AccountService accountService = context.getBean(AccountService.class); + + assertEquals("TestAccount", accountService.getAccountName()); + + ((AnnotationConfigApplicationContext) context).close(); + } + +} diff --git a/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml b/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml new file mode 100644 index 0000000000..eef434928f --- /dev/null +++ b/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml b/spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml new file mode 100644 index 0000000000..9779d64270 --- /dev/null +++ b/spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/spring-core-4/src/test/resources/config/messages.properties b/spring-core-4/src/test/resources/config/messages.properties new file mode 100644 index 0000000000..7d5a4baa73 --- /dev/null +++ b/spring-core-4/src/test/resources/config/messages.properties @@ -0,0 +1 @@ +account.name=TestAccount