考虑在您的配置中定义类型为 service 的 bean

问题描述 投票:0回答:1

我已经学习 Spring Boot 一周了,昨天我遇到了一个错误

` com.example.test.tutorial.TutorialApplication 中的字段 db 需要类型为“com.example.test.tutorial.DB”的 bean,但无法找到。

注入点有以下注释: - @org.springframework.beans.factory.annotation.Autowired(必需= true)

行动:

考虑在配置中定义“com.example.test.tutorial.DB”类型的 bean。`

TutorialApplication.java/主类

package com.example.test.tutorial;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;


@ComponentScan("com.example.test.tutorial.AppConfig")
@SpringBootApplication

public class TutorialApplication implements CommandLineRunner {
    @Autowired(required = true)
     DB db ;
    public static void main(String[] args) {

        SpringApplication.run(TutorialApplication.class, args);
    }


    @Override
    public void run(String... args) throws Exception {
        //System.out.println(db.getDb());
    }
}

界面

package com.example.test.tutorial;  
import org.springframework.stereotype.Component;  
 
public interface DB {      public String getDb(); } 

产品数据库

package com.example.test.tutorial;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

public class ProdDB implements DB{

    @Override
    public String getDb() {
        return "ProdDb";
    }


}

开发数据库

package com.example.test.tutorial;

import org.springframework.stereotype.Component;

public class DevDb implements DB{

    @Override
    public String getDb() {
        return "DevDb";
    }
}

豆子

package com.example.test.tutorial;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Component
@Configuration

public class AppConfig {


    @Bean
    public DB getDevBean()
    {
        return new DevDb();
    }
}

我尝试过@SpringBootApplication和@ComponentScan,但似乎没有任何效果,相同的代码在我朋友的机器上工作

spring spring-boot components autowired spring-bean
1个回答
0
投票

删除

@ComponentScan
。您将其配置为扫描不存在的包
com.example.test.tutorial.AppConfig
。如果您根本不指定,则将扫描包含带有
@SpringBootApplication
注释的类的包。
TutorialApplication
位于
com.example.test.tutorial
包中,与
AppConfig
相同,因此它将被组件扫描拾取并定义其bean。

与您的问题无关,但您不需要

@Component
上的
AppConfig
@Configuration
@Component
的专业化,因此您不需要两者都需要。

© www.soinside.com 2019 - 2024. All rights reserved.