Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Spring 为存储库配置bean文件_Spring_Spring Mvc_Javabeans - Fatal编程技术网

Spring 为存储库配置bean文件

Spring 为存储库配置bean文件,spring,spring-mvc,javabeans,Spring,Spring Mvc,Javabeans,我有两个名称相同但包不同的接口。 当我自动连线他们时,我必须给他们起个名字。 我的接口是com.example.mysql.UserRepository和com.example.mongo.UserRepository 所以我这样宣布: @Repository(value = "mysqlrepo") public interface UserRepository extends JpaRepository<User,Long> ... @Autowired ee3.demo.re

我有两个名称相同但包不同的接口。 当我自动连线他们时,我必须给他们起个名字。 我的接口是
com.example.mysql.UserRepository
com.example.mongo.UserRepository

所以我这样宣布:

@Repository(value = "mysqlrepo")
public interface UserRepository extends JpaRepository<User,Long> ...
@Autowired
ee3.demo.repositories.mysql.UserRepository userRepository;

@Qualifier("mongorepo")
@Autowired
UserRepository userRepository1;
现在我想知道如何使用bean配置文件来实现这一点。 我试过
但我得到的错误
接口不允许用于非抽象bean
。 我想知道这样做的正确方法是什么, 如果此问题与问题不同,因为此问题只有一个接口,不需要使用限定符来指定所需的接口
到目前为止,我尝试的是

您必须为这些bean定义别名

比如说

<bean id="mysqlService" lazy-init="true" alias="mysqlrepoAlias"
 class="ee3.demo.repositories.mysql.UserRepository"/>

<bean id="mongorepoService" lazy-init="true"  alias="mongorepoAlias"class="ee3.demo.repositories.mysql.UserRepository"/>

如果要使用XML配置配置Spring数据,则不需要为所有存储库声明bean。看这里。指定用于扫描的基本包更容易:


...
在这个帖子里


编辑

您需要为存储库指定不同的名称(在注释上使用
value
attribute)。我怀疑,如果您有多个具有相同名称的接口
UserRepository
,所有接口都将被最新声明的bean覆盖。这是源代码的修改

DemoApplication.java

@springboot应用程序
//@ImportResource(“类路径:beans.xml”)
公共类演示应用程序{
公共静态void main(字符串[]args){
run(DemoApplication.class,args);
}
}
beans.xml


mysql.UserRepository.java

@Repository(value=“userRepositoryJpa”)
公共接口用户存储库扩展了JpaRepository{
用户findByName(字符串名称);
}
mongodb.UserRepository.java

@Repository(value=“userRepositoryMongo”)
公共接口UserRepository扩展了MongoRepository{
用户findByName(字符串名称);
}

编辑2

另一种选择是为这些接口编写自己的实现,并从XML中引用它们。您还需要删除
@Repository
@EnableJpaRepositories
@EnableMongoRepositories
注释。您需要自己实现所有方法。但是你失去了Spring数据的好处。。。在文档中查找

公共接口UserRepositoryImpl实现UserRepository{ 公共用户findByName(字符串名称){ //您的自定义实现 } } XML配置示例



您确定我可以这样使用alias吗?请提供有关
alias
jobs@Joe你可以看看,这不是我要找的,我的问题不是使用别名作为类名,我的问题是
接口
不能在bean中使用,我需要命名这个库我在找你..我找到了这个例子。我想它不会真的解决你的问题,这不是我想要的,我正在使用xml文件配置我的应用程序。我认为在第二种情况下,您应该使用接口,而不是
JpaRepository
。是的,谢谢,我修复了它。您说您的问题与链接的问题不同,但您得到了相同的错误。如果您尝试建议的解决方案(从配置中删除错误的
声明),您将解决您的错误。我如何将它们与
@AutoWired
@Qualifier
一起用于实例化它们?您能否按类型而不是按名称使用
@AutoWired
?那么您就不需要限定符了。我收到的错误
无法自动连线。UserRepository类型的bean不止一个
@joegates抱歉,这似乎是另一个问题,这一个可以关闭=)@joegates您在代码中做了哪些更改以获得此错误?
<bean id="mysqlService" lazy-init="true" alias="mysqlrepoAlias"
 class="ee3.demo.repositories.mysql.UserRepository"/>

<bean id="mongorepoService" lazy-init="true"  alias="mongorepoAlias"class="ee3.demo.repositories.mysql.UserRepository"/>