我在不同的程序包中有两个接口:
'use strict'
const functions = require('firebase-functions');
const admin = require ('firebase-admin');
admin.initializApp(functions.config().firebase);
exports.sendNotification=
functions.database.ref('/Notifications/${receiver_id}/{notification_id}')
.onWrite(event =>{
const receiver_id = event.params.receiver_id;
const notification_id = event.params.notification_id;
console.log('We have a Notifications to send to :',
receiver_id);
if (!event.data.val())
{
return console.log('A Notifications has been deleted from
the database', notification_id);
}
const deviceToken =
admin.database().ref(`/Users/${receiver_id}/device_token`)
.once('value');
return deviceToken.then(response =>
{
const token_id = result.val();
const payload =
{
notifications;
title: "Friend Request",
body: "You have a New Friend",
icon: "default"
return admin.messaging().sendToDevice(token_id, payload)
.then(response =>{
console.log('This was the notification feature.');
});
};
});
});
package com.domain1
@Repository //expect that Spring will generate a bean
public interface PersonRepository extends org.springframework.data.repository.Repository<Person, UUID> {}
然后我尝试注入第一个存储库:
package com.domain2
//just an interface
public interface PersonRepository extends org.springframework.data.repository.Repository<Person, UUID> {}
//implementation
@Component
public PersonRepositoryImpl implements com.domain2.PersonRepository {}
我希望spring-data-jpa从public class MyClass {
@Autowired
com.domain1.PersonRepository personRepository;
}
包中注入一个存储库,但是不是它,而是注入domain1
(一个不实现com.domain2.PersonRepositoryImpl
接口的组件)。
我尝试使用限定词-没有帮助。
这是错误还是功能? :)
P.S。当然,如果我更改接口名称,那么一切都会按预期进行。
答案 0 :(得分:1)
这是当然的功能。接口不能实例化,相反,它们的实现是实例化的。 Spring将查找特定接口的所有实现,如果它可以标识一个唯一的接口(您的情况),它将使用该实现。
如果您有不止一个,它将给您一个例外,说明该自动接线有多个候选对象,并且不能独立选择一个。在这种情况下,您必须使用@Qualifer
来指定所需的实现。