Java Spring Boot 2 |非常基本的依赖项注入@自动连线问题

Java Spring Boot 2 |非常基本的依赖项注入@自动连线问题,java,spring,spring-boot,Java,Spring,Spring Boot,JavaSpringBoot2非常新。我确信这是一个非常愚蠢的问题 背景: 对我来说,我首先需要看到并理解一个概念的一个非常简单的实现,然后才能开始推断这个概念或技术的实用性 因此,我试图建立一个白痴证明的例子,显示@Autowired和DI“在工作”,在继续之前我可以完全理解 我试图用两个类建立一个超级简单的SpringBoot2项目;“TesterApplication”包含psvm和“Users”,后者是一个非常简单的类,包含一个字段“name”,没有参数构造函数。请参见图片: PSVM在

JavaSpringBoot2非常新。我确信这是一个非常愚蠢的问题

背景: 对我来说,我首先需要看到并理解一个概念的一个非常简单的实现,然后才能开始推断这个概念或技术的实用性

因此,我试图建立一个白痴证明的例子,显示@Autowired和DI“在工作”,在继续之前我可以完全理解

我试图用两个类建立一个超级简单的SpringBoot2项目;“TesterApplication”包含psvm和“Users”,后者是一个非常简单的类,包含一个字段“name”,没有参数构造函数。请参见图片:

PSVM在这里:

package com.tester.kryten.tester;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class TesterApplication {

    public static void main(String[] args) {

        System.out.println("1. Pre Spring Run");
        SpringApplication.run(TesterApplication.class, args);
        System.out.println("2. Post Spring Run");

        @Autowired
        Users user;
        System.out.println("3. " + user.getName());

    }
}
“用户”类位于此处:

package com.tester.kryten.tester;

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

@Component
public class Users {

    public String name = "foo bar";

    @Autowired
    public Users() {
            System.out.println("User class constructor called");
        }

    public String getName() { return name; }

}
现在,我所要做的就是理解在另一个类中引用和使用“User”的Spring托管实例的正确方法,在这个简单的示例中是TesterApplication类

我正在读一篇关于如何使用它的文章:

Users user = new User(); 
使用SpringDI来管理依赖关系更好,那么在本例中该如何做呢? 让我感到困惑的是,在TesterApplication类的第20行,我从Intellij获得了预期的代码完成,Intellij为我提供了getName()方法。这让我觉得这个实例一定是我的,但我只是得到:

错误:(17,9)java:注释类型不适用于此类 声明

能不能请一些善良的人帮我摆脱痛苦,告诉我我哪里误解了如何简单地将用户实例注入TestApplication.class-正确的方法?

  • 移动
    用户在主方法之外。它必须是类属性,而不是局部变量

  • 对于
    Users
    类中的构造函数,您不需要
    @Authowired
    注释

  • 如果构造函数被其他SpringBean参数化以注入它们,则可以对构造函数使用
    @authovided
    注释

  • 首先要了解的是@Component注释的使用。当您在应用程序上下文启动期间将注释放置在一个类上,就像您的case Users一样,通过创建一个Users对象并将其添加到Spring IOC容器来调用Users类的构造函数。要在另一个类中使用此对象,只需创建一个Users类型的属性,并将@Autowired注释放在该属性上,而不是放在方法中。因此,您可以在类的方法中使用此属性。此外,您不需要将@Autowired注释放在用户类构造函数上。

    请发布代码,不要使用图像。尤其是因为您犯了多个错误@Petermm-好的,我已经用代码替换了图像。@Robert Moskal-如果我没有犯错误,你认为我会寻求帮助吗;-)您应该知道,Springbean通常遵循单例模式,这意味着按照您定义它的方式,始终只有一个“Users”实例。此外,尝试自动连线的方式也不正确。我不能像你一样在静态环境中自动连线。它应该是一个类的非静态字段。我只想再注意一点。静态main方法将无法访问像用户这样的实例成员。它甚至不会编译。所以你需要找到另一种方法来测试这一点。谢谢,是的,我明白你的意思,这是一个糟糕的例子。我可能会添加一个@Controller并通过发送http请求来测试它。