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; + } +} 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; + } + +} 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()); + } +} 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 { + +}