我目前正在學習 Spring 框架。
我創建了 1 個 Bean 物件(類和介面)和 1 個依賴項(介面和類)。當我嘗試在沒有 xml 檔案和純 Java 類的情況下配置 Spring Beans 時,出現以下錯誤:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'swimCoach' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1160)
at com.mandeep.spring.JavaConfigApp.main(JavaConfigApp.java:14)
Spring配置類“SportConfig.java”如下:
package com.mandeep.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//@ComponentScan("com.mandeep.spring")
public class SportConfig {
//Define a Method for SadFortuneService
@Bean
public FortuneService sadFortuneService() {
return new SadFortuneService();
}
//Define a Method for SwimCoach and Inject Dependency
@Bean
public Coach swimCoach() {
return new SwimCoach(sadFortuneService());
}
}
主函式類“JavaConfigApp.java”如下:
package com.mandeep.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class JavaConfigApp {
public static void main(String[] args) {
//Read Spring Config. File
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("SportConfig.class");
//Get Bean From Spring Container
Coach theCoach = context.getBean("swimCoach",Coach.class);
//Call Method from the Bean
System.out.println(theCoach.getDailyWorkout());
System.out.println(theCoach.getDailyFortune());
//Close the Context
context.close();
}
}
“SwimCoach.java”類實作了Coach介面,如下:
package com.mandeep.spring;
public class SwimCoach implements Coach {
private FortuneService fortuneService;
public SwimCoach(FortuneService fortuneService) {
super();
this.fortuneService = fortuneService;
}
@Override
public String getDailyWorkout() {
return "Swim For 100 rounds";
}
@Override
public String getDailyFortune() {
return fortuneService.getFortune();
}
@Override
public String getEmail() {
return null;
}
}
依賴類“SadFortuneService.java”實作了FortuneService介面,如下:
package com.mandeep.spring;
public class SadFortuneService implements FortuneService {
@Override
public String getFortune() {
return "Today is your Bad Luck";
}
}
uj5u.com熱心網友回復:
嘗試使用組件類來構建你的背景關系
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SportConfig.class);
使用 basePackages 時,我們應該添加要掃描的包的完整路徑。
uj5u.com熱心網友回復:
嘗試掃描包:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.mandeep.spring");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/505309.html
上一篇:如何為我的服務層創建單元測驗?
下一篇:盡管有自定義登錄表單,但仍指向默認登錄表單。Springboot(2.7.2) Springsecurity(5.4) SecurityFilterChain Thymeleaf
