[英]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 -正确的方法? 请。
移动User user;
在主要方法之外。 它必须是类属性,而不是局部变量
Users
类中的构造函数不需要@Authowired
注释
@Authovired
注释用于构造函数首先要了解的是@Component 注解的使用。 当您在应用程序上下文启动期间将注释放在一个类上时,如在您的案例 Users 中,通过创建一个 Users 对象并将其添加到 Spring IOC 容器来调用 Users 类的构造函数。 要在另一个类中使用此对象,只需创建一个类型为 Users 的属性并将 @Autowired 注释放在此属性上,而不是在方法内部。 所以你可以在你的类的方法中使用这个属性。 此外,您不需要将 @Autowired 注释放在 Users 类构造函数上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.