当前位置: 首页 > 知识库问答 >
问题:

我收到一个错误--“没有定义[hello.MessagePrinter]类型的合格bean”

景凌
2023-03-14

这是我从spring网站执行spring应用程序示例时遇到的错误。我试图找到解决办法,但没有成功。请帮忙。我想这相当简单,但我无法理解。

文件Application.java

package hello;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
import org.springframework.context.support.AbstractApplicationContext;

@Configuration
@ComponentScan
public class Application {

    @Bean
    MessageService mockMessageService(){
        return new MessageService() {
            public String getMessage() {
                return "Hello World!";
            }
        };
    }

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext();
        ((AbstractApplicationContext) context).refresh();
        MessagePrinter printer = context.getBean(MessagePrinter.class);
        printer.printMessage();

    }

}

MessagePrinter.java

package hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessagePrinter {
    final private MessageService service;

    @Autowired
    public MessagePrinter(MessageService service){
        this.service = service;
    }

    public void printMessage(){
        System.out.println(this.service.getMessage());
    }

}

信息服务。JAVA

package hello;

public interface MessageService {
    String getMessage();

}

波姆。xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.springframework</groupId>
  <artifactId>gs-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>gs-maven</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>hello.Application</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.5.RELEASE</version>
    </dependency>
    <!-- tag::joda[] -->
    <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.2</version>
        </dependency>
      <!-- end::joda[] -->
  </dependencies>
</project>

错误:

2015年3月2日上午10:50:01组织。springframework。上下文注释。AnnotationConfigApplicationContext prepareRefresh信息:刷新组织。springframework。上下文注释。AnnotationConfigApplicationContext@c1b531:启动日期[Mon Mar 02 10:50:01 IST 2015];线程“main”组织中上下文层次结构异常的根。springframework。豆。工厂NoSuchBeanDefinitionException:在org上没有定义[hello.MessagePrinter]类型的合格bean。springframework。豆。工厂支持DefaultListableBeanFactory。org上的getBean(DefaultListableBeanFactory.java:371)。springframework。豆。工厂支持DefaultListableBeanFactory。org上的getBean(DefaultListableBeanFactory.java:331)。springframework。上下文支持AbstractApplicationContext。getBean(AbstractApplicationContext.java:968)位于hello。应用main(Application.java:23)

请让我知道我错过了什么

共有2个答案

空枫涟
2023-03-14

也有同样的问题。通过添加@ComponentScan({“com.packageName”})注释进行修复。

邹博明
2023-03-14

看着这个样本

http://www.tutorialspoint.com/spring/spring_java_based_configuration.htm

ApplicationContext context=new AnnotationConfigApplicationContext() 接受入口点bean的一个参数。

所以你的代码应该是

ApplicationContext context = 
               new AnnotationConfigApplicationContext(MessagePrinter.class);

如果您想注册几个bean,那么您可以使用注册或使用扫描来扫描包

 类似资料:
  • 前面我们一直使用字符串(String)作为错误消息。实际上,字符串作为错误类型是存在一些局限的。下面是友好的错误类型标准。字符串(String)很好地实现了前两点,但无法做到后两点: Rust 允许自定义错误类型。一般而言,一个“良好”的错误类型: 使用相同类型来表达不同的错误 给用户提供友好的错误信息 方便和其他类型比较 Good: Err(EmptyVec) Bad: Err("Please

  • 当试图用包含所有上下文配置的抽象类运行stepdefs时,spring看到2个不同的beans parent和step def 我使用的是Spring Booking版本:2.6.4,JUnit 5和Cucumber版本7.2.3 异常堆栈跟踪: io.cucumber.core.runtime.CucumberExecutionContext.runTestCase:没有可用的“Cucumber

  • 我尝试自动连接我的mapstruct mapper: 这是可行的: 但是为什么我不能使用: 我得到以下错误: 导致原因:org . spring framework . beans . factory . nosuchbeandidefinitionexception:没有类型为“pl . comp . window . application . mapper . windowdtomapper

  • 问题内容: 我正在尝试构建一个全新的Spring Framework 4.0项目,而没有所有神奇的东西,而只是简单地将它踢过去。 我在这里关注该教程:http : //spring.io/guides/tutorials/data/并取得了一些成功。我只是停留在这一点上。 当我运行此单元测试时,得到以下堆栈跟踪: 根据观察和研究,似乎是在告诉我有两个EntityManager类。第一个来自hibe

  • 我通过使用Spring和Hibernate创建实体、服务和服务的JUnit测试开始了我的项目。所有这些都很管用。然后,我添加了spring-mvc来使用许多不同的分步教程来制作这个web应用程序,但是当我试图使用注释制作Controller时,我在部署期间从Glassfish得到错误。我想由于某种原因Spring没有看到我的服务,但经过多次尝试,我仍然无法处理它。 /webapp/web-inf/