And*_*ili 8 java spring annotations spring-annotations spring-profiles
我正在攻读Spring Core认证,我对将配置文件用于JUnit测试有一些疑问.
所以我知道如果我用以下方式编写一个类:
@Profile("stub")
@Repository
public class StubAccountRepository implements AccountRepository {
private Logger logger = Logger.getLogger(StubAccountRepository.class);
private Map<String, Account> accountsByCreditCard = new HashMap<String, Account>();
/**
* Creates a single test account with two beneficiaries. Also logs creation
* so we know which repository we are using.
*/
public StubAccountRepository() {
logger.info("Creating " + getClass().getSimpleName());
Account account = new Account("123456789", "Keith and Keri Donald");
account.addBeneficiary("Annabelle", Percentage.valueOf("50%"));
account.addBeneficiary("Corgan", Percentage.valueOf("50%"));
accountsByCreditCard.put("1234123412341234", account);
}
public Account findByCreditCard(String creditCardNumber) {
Account account = accountsByCreditCard.get(creditCardNumber);
if (account == null) {
throw new EmptyResultDataAccessException(1);
}
return account;
}
public void updateBeneficiaries(Account account) {
// nothing to do, everything is in memory
}
}
Run Code Online (Sandbox Code Playgroud)
我声明属于存根配置文件的服务bean.
所以,如果我的测试类是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=TestInfrastructureConfig.class)
@ActiveProfiles("stub")
public class RewardNetworkTests {
.....................................
.....................................
.....................................
}
Run Code Online (Sandbox Code Playgroud)
这意味着它将使用属于存根配置文件的bean bean和没有配置文件的bean.是对的还是我错过了什么?
如果在类(其实例将是一个Spring bean)上使用@ActiveProfiles注释,我会在Java配置类上使用它会发生什么?
喜欢它的东西:
@Configuration
@Profile("jdbc-dev")
public class TestInfrastructureDevConfig {
/**
* Creates an in-memory "rewards" database populated
* with test data for fast testing
*/
@Bean
public DataSource dataSource(){
return
(new EmbeddedDatabaseBuilder())
.addScript("classpath:rewards/testdb/schema.sql")
.addScript("classpath:rewards/testdb/test-data.sql")
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
到底是做什么的?我认为这个类中配置的所有bean都属于jdbc-dev配置文件,但我不确定.你能给我更多关于这件事的信息吗?
为什么我必须在**配置类*上使用@Profile注释而不是直接注释我的bean?
TNX
Boh*_*rdt 17
如果查看ActiveProfiles注释的JavaDoc ,它包含以下文本:
ActiveProfiles是一个类级别注释,用于声明在为测试类加载ApplicationContext时应使用哪些活动Bean定义概要文件.
这意味着它只应用于为测试类声明活动的Spring配置文件.因此,如果将它放在Configuration类上,它应该没有任何效果.
至于@Profile注释,它可以在方法和类级别上使用.如果@Bean在配置类中使用注释的方法上使用它,则只有该bean属于该配置文件.如果在配置类上使用它,它将应用于配置类中的所有bean,如果在@Component类上使用它,则配置文件将应用于该类所表示的bean.
@Profile注释JavaDoc提供了有关这些规则的更详细说明.
为什么我必须在**配置类*上使用@Profile注释而不是直接注释我的bean?
好吧,如果给定配置类中的所有bean都应该仅对某些配置文件处于活动状态,那么在配置类上全局声明它是有意义的,以避免必须在所有bean上单独指定配置文件.但是,如果你要注释所有个体豆,它也会起作用.
| 归档时间: |
|
| 查看次数: |
9149 次 |
| 最近记录: |