Spring选择甚至没有实现存储库接口的存储库实现

时间:2018-07-20 16:14:44

标签: java spring spring-data-jpa

我在不同的程序包中有两个接口:

'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。当然,如果我更改接口名称,那么一切都会按预期进行。

1 个答案:

答案 0 :(得分:1)

这是当然的功能。接口不能实例化,相反,它们的实现是实例化的。 Spring将查找特定接口的所有实现,如果它可以标识一个唯一的接口(您的情况),它将使用该实现。

如果您有不止一个,它将给您一个例外,说明该自动接线有多个候选对象,并且不能独立选择一个。在这种情况下,您必须使用@Qualifer来指定所需的实现。