繁体   English   中英

弹簧靴 2 | 非常基本的依赖注入@Autowired 问题

[英]Spring Boot 2 | Very basic Dependency Injection @Autowired question

Java Spring Boot 2 非常新。提前道歉,我确信这是一个非常愚蠢的问题。

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

因此,我试图建立一个白痴证明示例,显示 @Autowired 和 DI 'at work',在继续之前我可以完全理解。

我试图建立一个只有两个类的超级简单的 Spring Boot 2 项目; 1 个“TesterApplication”,其中包含 psvm 和2 个“用户”,这是一个非常简单的类,其中包含一个字段“名称”,没有 args 构造函数。 看图片:

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; }

}

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

我正在阅读有关如何不赞成使用的信息:

Users user = new User(); 

并且使用 Spring DI 来管理依赖关系更好,那么在这个例子中它是如何完成的呢? 让我失望的是,在 TesterApplication 类的第 20 行,我从 Intellij 获得了预期的代码完成,为我提供了 getName() 方法。 这让我认为该实例必须我在那里,但我只是得到:

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

有没有好心人可以让我摆脱痛苦,告诉我我在哪里误解了如何简单地将 Users 实例注入 TestApplication.class -正确的方法? 请。

  1. 移动User user; 在主要方法之外。 它必须是类属性,而不是局部变量

  2. Users类中的构造函数不需要@Authowired注释

  3. 如果其他 Spring bean 对构造函数进行参数化以注入它们,则可以将@Authovired注释用于构造函数

首先要了解的是@Component 注解的使用。 当您在应用程序上下文启动期间将注释放在一个类上时,如在您的案例 Users 中,通过创建一个 Users 对象并将其添加到 Spring IOC 容器来调用 Users 类的构造函数。 要在另一个类中使用此对象,只需创建一个类型为 Users 的属性并将 @Autowired 注释放在此属性上,而不是在方法内部。 所以你可以在你的类的方法中使用这个属性。 此外,您不需要将 @Autowired 注释放在 Users 类构造函数上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM