Dependency injection practice and unit test - Tuong-Nguyen/Spring GitHub Wiki
Two ways, via:
- Constructor
- A setter
Dependency Injection in Spring

Create classes and interface to package spitter.web.services (/src/main/java/spitter/web/services folder)
- IWriter
- Writer
- NiceWriter
- WriterRunner
Ref: http://www.vogella.com/tutorials/SpringDependencyInjection/article.html
Use junit, spring-test and mockito. Download libraries from Maven, update pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
</dependency>- Create test package
spitter.web.services(/src/test/java/spitter/web/servicesfolder) - Create test class for
WriterRunner
- Create dependent and independent classes with @Component annotation
They are considered as candidates for auto detection when using configuration annotations and class-path scanning.
@Component
public class WriterRunner { ... }@Component
public class Writer implements IWriter { ... }- Add @Autowired to constructor or field or setter of dependent class
They will be autowired by Spring's DI facilities
@Autowired
public WriterRunner(IWriter writer) {
this.writer = writer;
} @Autowired
public void setWriter(IWriter writer) { this.writer = writer; }- Bootstrapping @Configuration, the classes may be processed by Spring container to generate beans.
- Use @Import
Defining the classes will be used, they no need marked as @Component
@Configuration @Import({Writer.class, WriterRunner.class}) public class WriterConfig { }
- Use @ComponentScan
Scanning all class marked as component in a package
@Configuration @ComponentScan("spitter.web.services") public class WriterConfig { }
- Unit test class must be:
- Run with Spring's runner
- Set context configuration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=WriterConfig.class)
public class WriterRunnerAutoWiredTest {