Spring配置的正确继承

时间:2012-05-25 14:41:32

标签: java spring configuration

我正在使用新的Spring配置创建一个项目。我有一个基类,它包含一些属性:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Basic.class, Protected.class})
public class BaseTest {
  @Autowired(required = false) protected String userName;
  @Autowired(required = false) protected String password;
  @Autowired protected String baseURL;

  @Test
  public void outputData() {
    System.out.println("UserName: " + userName + " Password: " 
                        + password + "Base URL: " + baseURL);
  }
}

@ActiveProfiles("default,protected")
public abstract class ProtectedTest extends BaseTest
{
  @Autowired protected String userName;
  @Autowired protected String password;
}

@Configuration @Profile("default")
public class Basic {
   @Bean public String baseURL() { return "http://www.baseURL.com"; }
}

@Configuration @Profile("protected")
public class Protected {
   @Bean public String userName() { return "userName"; }
   @Bean public String password() { return "password"; }
}

但是,当我去运行受保护的测试时,我收到一条通知,指出基本URL未正确连接。由于它扩展了BaseTest,并且两个配置文件都处于活动状态,为什么我没有收到baseURL bean?

1 个答案:

答案 0 :(得分:1)

必须为@ActiveProfiles({"default","protected"}),在您的情况下,它会假定名称default, protected的个人资料有效,而不是defaultprotected

还有一件事是基类BaseTest中的注释不是由ProtectedTest派生的,因此您需要再次将@RunWith@ContextConfiguration用于测试运行