如何在没有Xml文件且仅使用Java的情况下配置Spring项目



我目前正在学习Spring Framework。

我已经创建了1个Bean对象(类和接口(和1个依赖项(接口和类(。当我尝试在没有xml文件和纯Java类的情况下配置SpringBeans时,会出现以下错误:

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)

弹簧配置类";"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());
}
}

主函数类";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";
}
}

尝试使用组件类来构建上下文

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SportConfig.class);

当使用basePackages时,我们应该为要扫描的包添加完整路径。

尝试扫描包:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.mandeep.spring");

相关内容

最新更新