首页 > 解决方案 > 没有符合条件的 bean 类型预计至少有 1 个有资格作为自动装配候选者的 bean

问题描述

没有“com.ms.common.subscription.service.client.SubscriptionDetailService”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖项注释:{} 我遇到无法运行代码的问题,但我尝试通过添加 @Service @Repository

当我在服务中添加订阅时发生错误,否则它可以运行并显示结果

应用(主类)

package com.ms.batch.inactiveUser;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
        //(scanBasePackages={"com.ms.batch.inactiveuser"})

@ComponentScan(basePackages = {
        "com.ms.core, " +

        "com.ms.batch.inactiveuser, " +
        "com.ms.common.subscription.service.client, " +
        "com.ms.common.subscription.strategy.appmode, " +
        "com.ms.batch.inactiveuser.rest.config "
})
@EntityScan("com.ms.batch.inactiveuser.rest.model.entity")
@EnableJpaRepositories("com.ms.batch.inactiveuser.rest.repository")

public class BatchInactiveUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(BatchInactiveUserApplication.class, args);
    }

}

DTO


@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CorporateUserDTO {
    private String oranizationID;
    private String coperateID;
  //  private String userCD;
  private String userID;
    private String userName;
    private String localContactNo;
    private String overseaContactNo;
  //  private String policyValue;
}

服务

package com.ms.batch.inactiveUser.rest.service;

import com.ms.batch.inactiveUser.rest.model.dto.CorporateUserDTO;
import com.ms.batch.inactiveUser.rest.model.entity.CorporateUser;
import com.ms.batch.inactiveUser.rest.model.entity.SecurityPolicy;
import com.ms.batch.inactiveUser.rest.model.entity.User;
import com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository;
import com.ms.batch.inactiveUser.rest.repository.SecurityPolicyRepository;
import com.ms.batch.inactiveUser.rest.repository.UserRepository;
import com.ms.common.subscription.model.request.SubscriptionDetailRequest;
import com.ms.common.subscription.model.response.SubscriptionDetailResponse;
import com.ms.common.subscription.service.client.SubscriptionDetailService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("inactiveUserService")
@Transactional
@AllArgsConstructor
@Slf4j
public class InactiveUserServiceImpl implements InactiveUserService {

    @Autowired
    private InactiveUserRepository inactiveUserRepository;
    @Autowired
    private SecurityPolicyRepository securityPolicyRepository;
    @Autowired
    private UserRepository userRepository;

    @Autowired
   // @Qualifier("SubscriptionDetailService")
    private SubscriptionDetailService subscriptionDetailService;

    @Override
    public List<CorporateUserDTO> findCorporateUser() {
        
        List<CorporateUserDTO> corporateUserDTOList = new ArrayList<>();
        if(CollectionUtils.isEmpty(user)){
            log.debug("testing user:error");
          
        }else {
            for (int i = 0; i < user.size(); i++) {
           
                List<CorporateUser> corporateUser = inactiveUserRepository.findUser(user.get(i).getUserID());
                log.debug("testing my: " +corporateUser.get(0).getUserName());

                String subscriptionCode = "IA_US";
                for(int j = 0; j < corporateUser.size(); j++){
                    CorporateUserDTO corporateUserDTO = new CorporateUserDTO();
                    corporateUserDTO.setOranizationID(corporateUser.get(j).getCorporate().getOrganizationID());
                    corporateUserDTO.setCoperateID(corporateUser.get(j).getCorporateID());
                    corporateUserDTO.setUserID(user.get(j).getUserID());
                    corporateUserDTO.setUserName(corporateUser.get(j).getUserName());
                    corporateUserDTO.setLocalContactNo(corporateUser.get(j).getCorporate().getCountry().getLocalContactNo());
                    corporateUserDTO.setOverseaContactNo(corporateUser.get(j).getCorporate().getCountry().getOverseaContactNo());
                    
                    corporateUserDTOList.add(corporateUserDTO);

                    Map<String, SubscriptionDetailResponse> subscriptionList = getSubscriptionDetails(corporateUserDTO.getUserID(),subscriptionCode);
                    log.debug("testing subscription: " +subscriptionList);
                }
            }
        }
        return corporateUserDTOList;
    }

    @Override
  //  @Qualifier("SubscriptionDetailService")
    @Bean
    public Map<String, SubscriptionDetailResponse> getSubscriptionDetails(String userId, String subscriptionCode) {
        log.debug("process getSubscriptionDetails - userId : "+ userId);
        log.debug("process getSubscriptionDetails - subscriptionCode : "+ subscriptionCode);

        SubscriptionDetailRequest subscriptionDetailRequest = new SubscriptionDetailRequest();
        Map<String, Object> recipientSettingMap = new HashMap<String, Object>();
        recipientSettingMap.put("userId", userId);
        subscriptionDetailRequest.setSubscriptionItemCode(subscriptionCode);
        subscriptionDetailRequest.setRecipientSettingValue(recipientSettingMap);

        return subscriptionDetailService.getSubscriptionDetails(subscriptionDetailRequest);
    }
}

控制器

package com.ms.batch.inactiveUser.rest.controller;

import com.ms.batch.inactiveUser.rest.service.InactiveUserService;
import com.ms.batch.inactiveUser.rest.model.dto.CorporateUserDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@RestController
@RequestMapping(value = "/v1")
@Slf4j
public class InactiveUserController {

    @Autowired
    private InactiveUserService inactiveUserService;

    @PostMapping(value = "/getReceipentUserInactive")
    @ResponseStatus(HttpStatus.OK)
    public List<CorporateUserDTO> getCorporateUser(HttpServletRequest request){
       //CorporateUser username= inactiveUserService.getAll();
        //CorporateUserVO corporateUserVO = (CorporateUserVO)request.getAttribute();
        return inactiveUserService.findCorporateUser();
    }
}

存储库

package com.ms.batch.inactiveUser.rest.repository;

import com.ms.batch.inactiveUser.rest.model.entity.CorporateUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.UUID;

@Repository
public interface InactiveUserRepository extends JpaRepository<CorporateUser, UUID> {
    @Query("select u,t,prov from CorporateUser u " +
            "join u.corporate t " +
            "join t.country prov " +
            "where "+
            nvl(sec.lastLogon,cast(sec.dateCreated as date))) ")
    List<CorporateUser>findUser(@Param("userid")String userid);
}

服务接口

public interface InactiveUserService {
    List<CorporateUserDTO> findCorporateUser();
   // List<UserVO> findUser();
    Map<String, SubscriptionDetailResponse> getSubscriptionDetails(String userId, String subscriptionCode);

}

调试时出错

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    at 
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at com.ocbc.ms.batch.inactiveUser.BatchInactiveUserApplication.main(BatchInactiveUserApplication.java:26) ~[classes/:na]

2020-08-21 11:04:12.490 ERROR 10992 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.ms.batch.inactiveUser.rest.service.InactiveUserServiceImpl required a bean of type 'com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository' in your configuration.

Disconnected from the target VM, address: '127.0.0.1:57489', transport: 'socket'

Process finished with exit code 1

标签: spring-boot

解决方案


推荐阅读