diff --git a/spring-all/pom.xml b/spring-all/pom.xml
index 25a45d9baed8..c70d9d75fc92 100644
--- a/spring-all/pom.xml
+++ b/spring-all/pom.xml
@@ -130,6 +130,13 @@
test
+
+ org.assertj
+ assertj-core
+ 3.5.1
+ test
+
+
org.hamcrest
hamcrest-core
diff --git a/spring-all/src/main/java/org/baeldung/async/AsyncComponent.java b/spring-all/src/main/java/org/baeldung/async/AsyncComponent.java
index 2946ab0aa18b..8503f75c8fe7 100644
--- a/spring-all/src/main/java/org/baeldung/async/AsyncComponent.java
+++ b/spring-all/src/main/java/org/baeldung/async/AsyncComponent.java
@@ -1,11 +1,11 @@
package org.baeldung.async;
-import java.util.concurrent.Future;
-
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;
+import java.util.concurrent.Future;
+
@Component
public class AsyncComponent {
@@ -19,7 +19,7 @@ public Future asyncMethodWithReturnType() {
System.out.println("Execute method asynchronously " + Thread.currentThread().getName());
try {
Thread.sleep(5000);
- return new AsyncResult("hello world !!!!");
+ return new AsyncResult<>("hello world !!!!");
} catch (final InterruptedException e) {
}
diff --git a/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java b/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java
index 80cb060c7e06..8fde925fd86f 100644
--- a/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java
+++ b/spring-all/src/main/java/org/baeldung/profiles/DatasourceConfig.java
@@ -1,5 +1,5 @@
package org.baeldung.profiles;
public interface DatasourceConfig {
- public void setup();
+ void setup();
}
diff --git a/spring-all/src/main/java/org/baeldung/startup/AllStrategiesExampleBean.java b/spring-all/src/main/java/org/baeldung/startup/AllStrategiesExampleBean.java
new file mode 100644
index 000000000000..64af2d520c72
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/AllStrategiesExampleBean.java
@@ -0,0 +1,29 @@
+package org.baeldung.startup;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.InitializingBean;
+
+import javax.annotation.PostConstruct;
+
+public class AllStrategiesExampleBean implements InitializingBean {
+
+ private static final Logger LOG = Logger.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-all/src/main/java/org/baeldung/startup/InitMethodExampleBean.java b/spring-all/src/main/java/org/baeldung/startup/InitMethodExampleBean.java
new file mode 100644
index 000000000000..ea0a85d261fc
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/InitMethodExampleBean.java
@@ -0,0 +1,20 @@
+package org.baeldung.startup;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+
+import java.util.Arrays;
+
+public class InitMethodExampleBean {
+
+ private static final Logger LOG = Logger.getLogger(InitMethodExampleBean.class);
+
+ @Autowired
+ private Environment environment;
+
+ public void init() {
+ LOG.info(Arrays.asList(environment.getDefaultProfiles()));
+ }
+}
+
diff --git a/spring-all/src/main/java/org/baeldung/startup/InitializingBeanExampleBean.java b/spring-all/src/main/java/org/baeldung/startup/InitializingBeanExampleBean.java
new file mode 100644
index 000000000000..33b14864f32e
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/InitializingBeanExampleBean.java
@@ -0,0 +1,25 @@
+package org.baeldung.startup;
+
+import org.apache.log4j.Logger;
+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;
+
+import java.util.Arrays;
+
+@Component
+@Scope(value = "prototype")
+public class InitializingBeanExampleBean implements InitializingBean {
+
+ private static final Logger LOG = Logger.getLogger(InitializingBeanExampleBean.class);
+
+ @Autowired
+ private Environment environment;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ LOG.info(Arrays.asList(environment.getDefaultProfiles()));
+ }
+}
diff --git a/spring-all/src/main/java/org/baeldung/startup/InvalidInitExampleBean.java b/spring-all/src/main/java/org/baeldung/startup/InvalidInitExampleBean.java
new file mode 100644
index 000000000000..0b9c6f0c7d96
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/InvalidInitExampleBean.java
@@ -0,0 +1,18 @@
+package org.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-all/src/main/java/org/baeldung/startup/LogicInConstructorExampleBean.java b/spring-all/src/main/java/org/baeldung/startup/LogicInConstructorExampleBean.java
new file mode 100644
index 000000000000..2a7b3e26c777
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/LogicInConstructorExampleBean.java
@@ -0,0 +1,25 @@
+package org.baeldung.startup;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+@Component
+@Scope(value = "prototype")
+public class LogicInConstructorExampleBean {
+
+ private static final Logger LOG = Logger.getLogger(LogicInConstructorExampleBean.class);
+
+ private final Environment environment;
+
+ @Autowired
+ public LogicInConstructorExampleBean(Environment environment) {
+ this.environment = environment;
+
+ LOG.info(Arrays.asList(environment.getDefaultProfiles()));
+ }
+}
diff --git a/spring-all/src/main/java/org/baeldung/startup/PostConstructExampleBean.java b/spring-all/src/main/java/org/baeldung/startup/PostConstructExampleBean.java
new file mode 100644
index 000000000000..4cabaad4dfa2
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/PostConstructExampleBean.java
@@ -0,0 +1,25 @@
+package org.baeldung.startup;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Arrays;
+
+@Component
+@Scope(value = "prototype")
+public class PostConstructExampleBean {
+
+ private static final Logger LOG = Logger.getLogger(PostConstructExampleBean.class);
+
+ @Autowired
+ private Environment environment;
+
+ @PostConstruct
+ public void init() {
+ LOG.info(Arrays.asList(environment.getDefaultProfiles()));
+ }
+}
diff --git a/spring-all/src/main/java/org/baeldung/startup/SpringStartupConfig.java b/spring-all/src/main/java/org/baeldung/startup/SpringStartupConfig.java
new file mode 100644
index 000000000000..12854e1be549
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/SpringStartupConfig.java
@@ -0,0 +1,9 @@
+package org.baeldung.startup;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ComponentScan("org.baeldung.startup")
+public class SpringStartupConfig {
+}
\ No newline at end of file
diff --git a/spring-all/src/main/java/org/baeldung/startup/StartupApplicationListenerExample.java b/spring-all/src/main/java/org/baeldung/startup/StartupApplicationListenerExample.java
new file mode 100644
index 000000000000..32a63f0c1a39
--- /dev/null
+++ b/spring-all/src/main/java/org/baeldung/startup/StartupApplicationListenerExample.java
@@ -0,0 +1,20 @@
+package org.baeldung.startup;
+
+import org.apache.log4j.Logger;
+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 = Logger.getLogger(StartupApplicationListenerExample.class);
+
+ public static int counter;
+
+ @Override
+ public void onApplicationEvent(ContextRefreshedEvent event) {
+ LOG.info("Increment counter");
+ counter++;
+ }
+}
diff --git a/spring-all/src/main/resources/startupConfig.xml b/spring-all/src/main/resources/startupConfig.xml
new file mode 100644
index 000000000000..8226665a9079
--- /dev/null
+++ b/spring-all/src/main/resources/startupConfig.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-all/src/test/java/org/baeldung/startup/SpringStartupTest.java b/spring-all/src/test/java/org/baeldung/startup/SpringStartupTest.java
new file mode 100644
index 000000000000..523a27c2c403
--- /dev/null
+++ b/spring-all/src/test/java/org/baeldung/startup/SpringStartupTest.java
@@ -0,0 +1,44 @@
+package org.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 SpringStartupTest {
+
+ @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-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigTest.java b/spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigTest.java
new file mode 100644
index 000000000000..19a35bb92bc7
--- /dev/null
+++ b/spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigTest.java
@@ -0,0 +1,26 @@
+package org.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 SpringStartupXMLConfigTest {
+
+ @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);
+ }
+}