Groovy 为springboot托管类获取注入bean的最简洁的方法是什么?

Groovy 为springboot托管类获取注入bean的最简洁的方法是什么?,groovy,dependency-injection,spring-boot,Groovy,Dependency Injection,Spring Boot,我有一个注入另一个组件的简单应用程序 @ComponentScan @EnableAutoConfiguration @Configuration class Application { static void main(String[] args) { SpringApplication.run(Application, args) } @Bean AuthorizationServerTokenServices tokenServices() { retu

我有一个注入另一个组件的简单应用程序

@ComponentScan
@EnableAutoConfiguration
@Configuration
class Application {

  static void main(String[] args) {
    SpringApplication.run(Application, args)
  }

  @Bean
  AuthorizationServerTokenServices tokenServices() {
    return MY THING HERE
  }

}
我想用一种快速/最少的方法来更新它,并获取springboot wires项(本例中用于tokenServices)。我正在尝试使用TestNG验证一些配置/设置/etc


我还应该说,我没有使用任何xml来配置它(使用gradle/groovy/springboot)

借助Spring概要文件,您可以很容易地引入条件bean

在您的情况下,代码如下所示:

@Configuration
@Profile("tokenService")
public TestTokenServiceConfig {

   @Primary
   @Bean
   AuthorizationServerTokenServices tokenServices() {
     //implementation
   }   
}
您在此类中提供的自定义实现仅在概要文件
tokenService
处于活动状态时由Spring使用。需要使用
@Primary
,才能使Spring使用指定的bean,而不是应用程序上下文中的任何其他bean

还请注意,由于您将在测试环境中使用定制服务,因此可以使用Mockito(或您喜欢的任何其他模拟框架)轻松模拟实现

实际的集成测试应该是这样的:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@ActiveProfiles("tokenService")
class YourIntegrationTest {

    @Autowired
    AuthorizationServerTokenServices tokenServices;

    //test
}

你的意思是想编写一个集成测试,将特定的bean注入到测试中吗?正确-我想手动连接一个对象(springboot通常会为您这样做),以便测试特定bean/etc的配置(不使用基于xml的编写)。因此,您希望启动spring上下文,但您希望能够提供特定bean的特定实现,该实现将被注入测试类?非常好!并且只是澄清一下,这里的“概要文件”将引入什么属性文件(以及从什么位置-测试目录?)Spring Boot将自动加载
应用程序.properties
(从类路径-在测试用例中,它将从测试目录)和
应用程序令牌服务.properties