Java @自动连线和实例化
我找到了下面的代码Java @自动连线和实例化,java,spring,dependency-injection,Java,Spring,Dependency Injection,我找到了下面的代码 public class Foo { @Autowired private MyService myService = new MyService(); } 这是否意味着Spring将覆盖在创建Foo时创建的myService实例 这段代码使在Junit上下文中使用Foo成为可能,而无需在springcontext中启动 这样做可以吗?不,这样做不行。相反: @Service public class Foo { private MyService
public class Foo {
@Autowired
private MyService myService = new MyService();
}
这是否意味着Spring将覆盖在创建Foo时创建的myService实例
这段代码使在Junit上下文中使用Foo成为可能,而无需在springcontext中启动
这样做可以吗?不,这样做不行。相反:
@Service
public class Foo {
private MyService myService;
@Autowired
public Foo(MyService myService){
this.myService = myService;
}
}´
通过这种方式,Spring在构建服务时注入了所需的依赖项。对于JUnit上下文,您只需要自己提供它,它可以是一个真实的实例,也可以是一个模拟:
@Test
public void testFoo(){
MyService mockService = mock(MyService.class);
Foo foo = new Foo(mockService);
foo.myMethod();
verify(/*Check that foo has done whatever you want with MyService*/);
}
不,那样做是不行的。相反:
@Service
public class Foo {
private MyService myService;
@Autowired
public Foo(MyService myService){
this.myService = myService;
}
}´
通过这种方式,Spring在构建服务时注入了所需的依赖项。对于JUnit上下文,您只需要自己提供它,它可以是一个真实的实例,也可以是一个模拟:
@Test
public void testFoo(){
MyService mockService = mock(MyService.class);
Foo foo = new Foo(mockService);
foo.myMethod();
verify(/*Check that foo has done whatever you want with MyService*/);
}
除了上面的答案,如果您使用的是Spring4,您还可以使用ContextConfig运行它,如下所示 使用SpringBoot,您可以使用@bean注释创建bean,然后自动连接它
class MyTestConfig{
@Bean
public MyService myService(){
return new MyService();
};
}
使用MyTestConfig作为contextConfiguration和autowire作为
@Autowired
public MyService myService
除了上面的答案,如果您使用的是Spring4,您还可以使用ContextConfig运行它,如下所示 使用SpringBoot,您可以使用@bean注释创建bean,然后自动连接它
class MyTestConfig{
@Bean
public MyService myService(){
return new MyService();
};
}
使用MyTestConfig作为contextConfiguration和autowire作为
@Autowired
public MyService myService
您应该使用Spring的JUnit集成来执行测试,而不是这样做。可能的重复:根据您是否需要状态,您应该执行一个或另一个。您应该使用构造函数注入,而不是这样做。这使您能够两全其美。您应该使用Spring的JUnit集成来执行测试,而不是这样做。可能的重复:您应该根据您是否需要状态来执行其中一项或另一项。您应该使用构造函数注入,而不是这样做。这让你两全其美。只是为了添加愚蠢的评论,但有时很有用,mock here是来自Mockito框架的,我相信?是的,但你可以使用任何或她的模拟库只是为了添加愚蠢的评论,但有时很有用,mock here是来自Mockito框架的,我相信?是的,但你可以使用任何或她的模拟库