出现错误:创建名称为“*”的 bean 时出错:通过字段“repo”表示不满足的依赖关系; n

Posted

技术标签:

【中文标题】出现错误:创建名称为“*”的 bean 时出错:通过字段“repo”表示不满足的依赖关系; n【英文标题】:getting error:Error creating bean with name '*': Unsatisfied dependency expressed through field 'repo'; n 【发布时间】:2020-01-27 17:09:07 【问题描述】:

错误: org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“issueTemplateServiceImpl”的bean时出错:通过字段“repo”表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“com.conseco.repository.IssueTemplateRepo”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注解:@org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4840) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397) 在 java.base/java.util.concurrent.FutureTask.run(未知来源) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.base/java.lang.Thread.run(未知来源) 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“com.conseco.repository.IssueTemplateRepo”类型的合格bean:预计至少有1个符合自动装配候选资格的bean。依赖注解:@org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1654) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1213) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ... 24 更多

我的代码:

问题模板控制器:

package com.conseco.controller;




import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.conseco.dao.IssueTemplateInfo;
import com.conseco.service.IssueTemplateService;


@Controller
public class IssueTemplateController 

    @Autowired
  IssueTemplateService service;



    @RequestMapping("/new")
    public ModelAndView create()
    

        System.out.println("service: "+service);
        ModelAndView mav=new ModelAndView("index");
        System.out.println("1..................");
        IssueTemplateInfo issue=new IssueTemplateInfo();
        issue.setSDT("123456");
        issue.setAnalysis("test");
        issue.setApplicaiton("AWD");
        issue.setBatch("no");
        issue.setBusinessImpact("N/A");
        issue.setDescription("will describe later");
        issue.setEMER("N/A");
        issue.setImpDate("25th");
        issue.setPermanentFix("TBT");
        issue.setQCDefect("234");
        issue.setRootCause("unknown");
        issue.setSeverity(3);
        issue.setStatus("Inprogress");
        issue.setWorkAround("a lot to work on");
        service.save(issue);

        System.out.println("4..............");


        return mav;
    




MyFrontController:



package com.conseco.controller;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import com.conseo.config.WebMvcConfig;

public class MyFrontController extends  AbstractAnnotationConfigDispatcherServletInitializer

    @Override
    protected Class<?>[] getRootConfigClasses() 
        // TODO Auto-generated method stub
        return new Class[] WebMvcConfig.class;
    

    @Override
    protected Class<?>[] getServletConfigClasses() 
        // TODO Auto-generated method stub
        return null;
    

    @Override
    protected String[] getServletMappings() 
        // TODO Auto-generated method stub
        return new String[] "/";
    






IssueTemplateRepo:
package com.conseco.repository;

import org.springframework.data.repository.CrudRepository;


import com.conseco.dao.IssueTemplateInfo;


public interface IssueTemplateRepo extends CrudRepository<IssueTemplateInfo, String> 





IssueTemplateService:


package com.conseco.service;

import org.springframework.stereotype.Service;

import com.conseco.dao.IssueTemplateInfo;


public interface IssueTemplateService 


    IssueTemplateInfo save(IssueTemplateInfo issue);




IssueTemplateServiceImpl:
package com.conseco.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.conseco.dao.IssueTemplateInfo;
import com.conseco.repository.IssueTemplateRepo;

@Service
public class IssueTemplateServiceImpl implements IssueTemplateService 

    @Autowired
    private IssueTemplateRepo repo;

    public IssueTemplateRepo getRepo() 
        return repo;
    

    public void setRepo(IssueTemplateRepo repo) 
        this.repo = repo;
    

    @Override
    public IssueTemplateInfo save(IssueTemplateInfo issue) 
        // TODO Auto-generated method stub
        return repo.save(issue);
    







WebMvcConfigurer:
package com.conseo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;



@Configuration
@EnableWebMvc
@ComponentScan("com.conseco.service","com.conseco.controller","com.conseco.repository","com.conseco.dao")
public class WebMvcConfig implements WebMvcConfigurer 


【问题讨论】:

您好,如果您添加一些您正在尝试做的单词,那就太好了。 我正在尝试使用 spring data jpa 在数据库中插入值,该 jpa 具有预定义的保存或更新或删除定义的 crud 存储库 【参考方案1】:

在界面上添加注解@Component

@Component
public interface IssueTemplateRepo extends CrudRepository<IssueTemplateInfo, String> 

    

添加@Component注解后会变成一个spring bean,可以被Spring IoC容器管理。

【讨论】:

@Santhosh 使用 @Repository 而不是 @Component

以上是关于出现错误:创建名称为“*”的 bean 时出错:通过字段“repo”表示不满足的依赖关系; n的主要内容,如果未能解决你的问题,请参考以下文章

创建 ServletContext 中定义的名称为“dataSource”的 bean 时出错

Spring MVC:创建 ServletContext 资源中定义的名称为“HandlerMapping”的 bean 时出错

Springboot 错误:使用名称创建 bean 时出错

: 创建类路径资源中定义的名称为“entityManagerFactory”的 bean 时出错

Spring boot 2.1.1 到 2.1.2:创建名称为“payloadRootAnnotationMethodEndpointMapping”的 bean 时出错

UnsatisfiedDependencyException:创建具有名称的 bean 时出错