我正在为Spring Core认证学习,对于使用Java配置方式配置Bean的相关练习,我有以下疑问。
package config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import rewards.RewardNetwork;
import rewards.internal.RewardNetworkImpl;
import rewards.internal.account.AccountRepository;
import rewards.internal.account.JdbcAccountRepository;
import rewards.internal.restaurant.JdbcRestaurantRepository;
import rewards.internal.restaurant.RestaurantRepository;
import rewards.internal.reward.JdbcRewardRepository;
import rewards.internal.reward.RewardRepository;
@Configuration
public class RewardsConfig {
@Autowired
DataSource dataSource;
@Bean
public RewardNetwork rewardNetwork(){
return new RewardNetworkImpl(accountRepository(), restaurantRepository(), rewardRepository());
}
@Bean
public AccountRepository accountRepository(){
JdbcAccountRepository repository = new JdbcAccountRepository();
repository.setDataSource(dataSource);
return repository;
}
@Bean
public RestaurantRepository restaurantRepository(){
JdbcRestaurantRepository repository = new JdbcRestaurantRepository();
repository.setDataSource(dataSource);
return repository;
}
@Bean
public RewardRepository rewardRepository(){
JdbcRewardRepository repository = new JdbcRewardRepository();
repository.setDataSource(dataSource);
return repository;
}
}
Java配置的正确解释是Spring吗?
例如,我可以说RewardNetwork是声明的bean,而RewardNetworkImpl是这个bean的当前实现吗?
所有的3Beans(AccountRepository,RestaurantRepository和RewardRepository)都依赖于另一个bean数据源,正如您在前面的代码片段中看到的,该数据源声明为@AutoWired:
@Autowired
DataSource dataSource;
因此,在我的示例中,它被声明到单元测试文件夹src/test/java:
package rewards;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
@Configuration
public class TestInfrastructureConfig {
/**
* 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();
}
}
因此dataSource bean定义了一个仅对测试环境有效的数据源(在执行单元测试时使用)。
现在我的疑问是:我有两个不同的配置类,而dataSource bean没有定义到RewardsConfig配置类中,而RewardsConfig配置类包含使用它的3个bean。为什么我不能不使用@import注释将其用于rewardsconfig?
@Import(TestInfrastructureConfig.class)
您不必导入bean来使它们可用于自动生成。@import
用于添加额外的配置类。
您真的不想硬导入一个测试配置类,因为这样您的生产代码就引用了仅测试的代码(并且,在这种情况下,总是激活它)。相反,把您的配置类想得更像一个抽象类:声明autowired bean,但不要担心它们是如何到达那里的。下游(运行时)配置将提供它们,您不需要知道如何提供。也许您提供了一个内存中的H2来测试并在实际运行中使用Spring Cloud连接器,这并不重要。
在Spring Hibernate XML配置中,我有 我知道SpringJava配置的等价物如下:LocalSessionFactoryBuilder(dataSource())。AddAnnotatedClass(Foo.class)。buildSessionFactory(); 我的问题是,如果我不使用LocalSessionFactoryBuilder类,而是使用HibernateJpaV
问题内容: 我有一份詹金斯工作,后来被克隆和修改。现在,我想比较两个作业的配置。不是历史更改,不是结果,而是两个作业的配置。 是否可以比较两个Jenkins作业的配置? 问题答案: 尝试: 要么
这是来自SQLZOO.NET的问题
我打算在Hardhat中开发我的智能合约,并在RSK regtest本地节点上测试它们。我找到了一个松露测试配置。 我需要什么配置来在RSK regtest上运行我的测试?
我正在使用Spring Boot 2。使用Hibernate 5连接不同服务器上的两个不同的MySQL数据库(Bar和Foo)。我试图从REST Controller中的方法列出实体的所有信息(自己的属性和@OneToOne和@ManyToOne关系)。 我已经遵循了几个教程来做到这一点,因此,我能够获得我的数据库(Foo)的所有信息,但是,当检索集时,我总是得到我的辅助数据库(Bar)的异常。如
我试图了解mysql查询在GROUP BY和不使用GROUP BY的情况下是如何工作的。 假设我有一个FILM_ACTORS表,其中每个ACTOR_ID都有一个相应的film_id。于是同一个演员参演了N部不同的电影。 我想选出参与20部电影的演员: 这个查询起作用,并返回参与20部电影的actor_id。但如果我只是: 为什么该查询仅在我将其等于film_actor表(5463)的大小时才返回值