Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @自动连线和实例化_Java_Spring_Dependency Injection - Fatal编程技术网

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框架的,我相信?是的,但你可以使用任何或她的模拟库