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"/>