You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring框架NoSuchBeanDefinitionException异常求助:找不到名为'college'的Bean

排查与解决Spring中"No bean named 'college' available"异常

问题原因分析

从你的代码和异常信息来看,主要有三个核心问题导致找不到名为college的Bean:

  • 内部配置类的访问权限问题:你的Config类是College类的默认权限内部类(没有public修饰),Spring的AnnotationConfigApplicationContext无法正常访问并加载这个配置类,导致配置里的@Bean定义完全没生效。
  • 组件扫描未配置:你通过AnnotationConfigApplicationContext(Config.class)启动容器时,Spring只会处理这个配置类里的@Bean方法,不会自动扫描带有@Component注解的类(比如你的College类),所以@Component("college")定义的Bean根本没被注册到容器中。
  • Bean命名不匹配:就算Config类能被加载,你在Config里的@Bean方法是name(),默认生成的Bean名字是name,不是你要获取的college,这也会导致找不到对应名称的Bean。

解决方法

我们可以分两种方式来修复,选一种适合你的即可:

方式一:修复配置类并启用组件扫描

  1. 调整Config类的结构与权限:把Config类改成public的顶级类(不要嵌套在College里),或者给内部的Config加上public修饰符(更推荐顶级类,避免不必要的访问问题)。
  2. 在Config类上添加组件扫描注解:让Spring能扫描到@Component标注的College类。
  3. (可选)统一Bean命名:如果想通过@Bean定义College,确保Bean名字是college。

修改后的代码示例:

// College.java
package com.annotations.annotations;
import org.springframework.stereotype.Component;

@Component("college")
public class College {
    public void id() {
        System.out.println("33");
    }
}

// Config.java(顶级类,public)
package com.annotations.annotations;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.annotations.annotations") // 扫描当前包下的组件
public class Config {
    // 可选:如果需要通过@Bean定义,指定name为"college"
    // @Bean("college")
    // public College collegeBean() {
    //     return new College();
    // }
}

// App.java
package com.annotations.annotations;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {
    public static void main(String[] args) {
        ApplicationContext mech = new AnnotationConfigApplicationContext(Config.class);
        College lokesh = mech.getBean("college", College.class);
        lokesh.id();
    }
}

方式二:直接通过@Bean定义并指定正确的Bean名称

如果你不想用@Component,只想通过@Bean来注册Bean,那只需要:

  1. 把Config改成可访问的public类(顶级类或public内部类)。
  2. 在@Bean注解里指定名称为college。

修改后的核心代码:

// Config.java(public顶级类)
@Configuration
public class Config {
    @Bean("college") // 指定Bean名称为college
    public College college() {
        return new College();
    }
}

// College.java可以去掉@Component注解
public class College {
    public void id() {
        System.out.println("33");
    }
}

验证效果

不管用哪种方式,运行App类后,Spring容器都会成功注册名为college的Bean,调用id()方法会输出33,异常也就解决了。

内容的提问来源于stack exchange,提问作者Lokesh Naidu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:47:33