Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 如何在没有应用程序上下文的情况下自动连接Springbean_Java_Spring_Spring Ioc - Fatal编程技术网

Java 如何在没有应用程序上下文的情况下自动连接Springbean

Java 如何在没有应用程序上下文的情况下自动连接Springbean,java,spring,spring-ioc,Java,Spring,Spring Ioc,我希望能够通过自动连接使用bean,而不必直接使用ApplicationContext。下面是一个我希望能够做到的虚拟示例 配置类 @Configuration public class CoffeeConfig { @Bean public CoffeeMachine provideCoffeeMachine() { return new CoffeeMachine(provideCoffeeBean()); } @Bean

我希望能够通过自动连接使用bean,而不必直接使用ApplicationContext。下面是一个我希望能够做到的虚拟示例

配置类

@Configuration
public class CoffeeConfig
{
     @Bean
     public CoffeeMachine provideCoffeeMachine()
     {
         return new CoffeeMachine(provideCoffeeBean());
     }

     @Bean
     public CoffeeBean provideCoffeeBean()
     {
          return new CoffeeBean(Type.BEST);
     }
}
@Component
public class CoffeeShop
{    
    @Autowired
    private CoffeeMachine cMachine;

    public void pourCoffee()
    {
         System.out.print("Pouring cup of coffee: " + cMachine.pour(Amount.8OZ));
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CoffeeConfig.class, loader=AnnotationConfigContextLoader.class)
public class SpringIOCTests
{
    @Autowired 
    public CoffeeMachine cMachine;

    @Test
    public void influxDevTest()
    {
        assertEquals(Type.BEST, cMachine.getBeans());
    }
}
咖啡厅课程

@Configuration
public class CoffeeConfig
{
     @Bean
     public CoffeeMachine provideCoffeeMachine()
     {
         return new CoffeeMachine(provideCoffeeBean());
     }

     @Bean
     public CoffeeBean provideCoffeeBean()
     {
          return new CoffeeBean(Type.BEST);
     }
}
@Component
public class CoffeeShop
{    
    @Autowired
    private CoffeeMachine cMachine;

    public void pourCoffee()
    {
         System.out.print("Pouring cup of coffee: " + cMachine.pour(Amount.8OZ));
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CoffeeConfig.class, loader=AnnotationConfigContextLoader.class)
public class SpringIOCTests
{
    @Autowired 
    public CoffeeMachine cMachine;

    @Test
    public void influxDevTest()
    {
        assertEquals(Type.BEST, cMachine.getBeans());
    }
}
为了解决这个问题,我一直在阅读spring文档和spring教程。问题是,我没有看到任何人试图说明如何做这样简单的事情,当他们这样做时,他们最终求助于使用应用程序上下文。也就是说,我知道如果我使用Spring运行单元测试,我可以执行以下操作:

测试类

@Configuration
public class CoffeeConfig
{
     @Bean
     public CoffeeMachine provideCoffeeMachine()
     {
         return new CoffeeMachine(provideCoffeeBean());
     }

     @Bean
     public CoffeeBean provideCoffeeBean()
     {
          return new CoffeeBean(Type.BEST);
     }
}
@Component
public class CoffeeShop
{    
    @Autowired
    private CoffeeMachine cMachine;

    public void pourCoffee()
    {
         System.out.print("Pouring cup of coffee: " + cMachine.pour(Amount.8OZ));
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CoffeeConfig.class, loader=AnnotationConfigContextLoader.class)
public class SpringIOCTests
{
    @Autowired 
    public CoffeeMachine cMachine;

    @Test
    public void influxDevTest()
    {
        assertEquals(Type.BEST, cMachine.getBeans());
    }
}
这种配置方式使我相信,以这种方式使用自动布线应该可以在实际应用程序中实现,而不是使用这些仅测试的依赖项,如ContextConfiguration。我还应该注意,这个单元测试确实通过了


Spring是否提供了一种方法,在这种方法中,我们可以以一种简洁的方式自动连接依赖项,避免直接使用应用程序上下文?

这是不可能的。
ApplicationContext
是Spring的IOC的核心部分,它是一个容器。您的测试用例只是在
SpringJUnit4ClassRunner
中对您隐藏它。是否希望避免在测试用例中创建应用程序上下文?如果是这样,为什么不在测试目标类上模拟自动连接类呢?不,测试用例工作正常,因为应用程序上下文由ContextConfiguration注释处理。我想要的是能够应用这种想法,避免直接使用应用程序上下文。我更愿意将它隐藏在某种Spring注释中。测试不是魔术。有一个
main
方法检测
SpringJUnit4ClassRunner
,实例化它并使用它创建
ApplicationContext
,然后加载
@ContextConfiguration
中提到的类并运行测试。如果你想要类似的东西,就写下来。注释也不是魔法。有些东西在处理它们。如果不清楚的话,我理解它们在测试用例中的工作方式和原因。我不关心应用程序上下文在引擎盖下如何调用或在何处调用,只要自动连接按我所希望的方式工作。从你告诉我的,这听起来好像是绝对没有内置在春天,以适应自动布线的方式。对吗?