我已经学习 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,但似乎没有任何效果,相同的代码在我朋友的机器上工作
删除
@ComponentScan
。您将其配置为扫描不存在的包com.example.test.tutorial.AppConfig
。如果您根本不指定,则将扫描包含带有 @SpringBootApplication
注释的类的包。 TutorialApplication
位于com.example.test.tutorial
包中,与AppConfig
相同,因此它将被组件扫描拾取并定义其bean。
与您的问题无关,但您不需要
@Component
上的 AppConfig
。 @Configuration
是 @Component
的专业化,因此您不需要两者都需要。