From 259f3ca7abaea9c76159ac61a721f55c8be7466a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 19 Jul 2016 12:40:49 +0200 Subject: [PATCH 1/4] Create CircularDependencyA --- .../circulardependency/CircularDependencyA | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA diff --git a/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA b/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA new file mode 100644 index 0000000000..54b012e347 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA @@ -0,0 +1,29 @@ +package com.baeldung.circulardependency; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class CircularDependencyA implements ApplicationContextAware, InitializingBean { + + private CircularDependencyB circB; + + private ApplicationContext context; + + public CircularDependencyB getCircB() { + return circB; + } + + @Override + public void afterPropertiesSet() throws Exception { + circB = context.getBean(CircularDependencyB.class); + } + + @Override + public void setApplicationContext(final ApplicationContext ctx) throws BeansException { + context = ctx; + } +} From a42a9bbc883b26078cc25e24fb75e95c88fd7062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 19 Jul 2016 12:41:15 +0200 Subject: [PATCH 2/4] Create CircularDependencyB --- .../circulardependency/CircularDependencyB | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB diff --git a/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB b/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB new file mode 100644 index 0000000000..dc2240d0b5 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB @@ -0,0 +1,22 @@ +package com.baeldung.circulardependency; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class CircularDependencyB { + + private CircularDependencyA circA; + + private String message = "Hi!"; + + @Autowired + public void setCircA(final CircularDependencyA circA) { + this.circA = circA; + } + + public String getMessage() { + return message; + } + +} From 170a45a3148ccf665944d58113d1601963f3fe00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 19 Jul 2016 12:42:04 +0200 Subject: [PATCH 3/4] Create TestConfig --- .../java/com/baeldung/circulardependency/TestConfig | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig diff --git a/spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig new file mode 100644 index 0000000000..a072c5d402 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig @@ -0,0 +1,10 @@ +package com.baeldung.circulardependency; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.circulardependency" }) +public class TestConfig { + +} From 4e7a47de12451a19df2fcbaf93edd8708c182946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 19 Jul 2016 12:42:27 +0200 Subject: [PATCH 4/4] Create CircularDependencyTest --- .../circulardependency/CircularDependencyTest | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest diff --git a/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest new file mode 100644 index 0000000000..4229f21f10 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest @@ -0,0 +1,35 @@ +package com.baeldung.circulardependency; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { TestConfig.class }) +public class CircularDependencyTest { + + @Autowired + ApplicationContext context; + + @Bean + public CircularDependencyA getCircularDependencyA() { + return new CircularDependencyA(); + } + + @Bean + public CircularDependencyB getCircularDependencyB() { + return new CircularDependencyB(); + } + + @Test + public void givenCircularDependency_whenSetterInjection_thenItWorks() { + final CircularDependencyA circA = context.getBean(CircularDependencyA.class); + + Assert.assertEquals("Hi!", circA.getCircB().getMessage()); + } +}