java - 弹簧靴 2 | 非常基本的依赖注入@Autowired问题
问题描述
Java Spring Boot 2 非常新。对于我确信这是一个非常愚蠢的问题提前道歉。
背景:对我来说,首先我需要看到和理解一个概念的非常纯粹和简单的实现,然后我才能开始推断这个概念或技术的效用。
因此,我试图设置一个防白痴的示例,显示@Autowired 和 DI '在工作',在继续之前我可以完全理解。
我试图建立一个只有两个类的超级简单的 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; }
}
现在,我要做的就是了解在另一个类中引用和使用“User”的 Spring 托管实例的正确方法,在这个简单的示例中是 TesterApplication 类。
我正在阅读它是如何被使用的:
Users user = new User();
并且使用 Spring DI 来管理依赖关系更好,那么在这个例子中它是如何完成的呢?让我震惊的是,在 TesterApplication 类的第 20 行,我从 Intellij 获得了预期的代码完成,为我提供了 getName() 方法。这让我认为该实例必须在那里,但我只是得到:
错误:(17, 9) java: annotation type not applicable to this kind of declaration
那里的某个好心人可以让我摆脱痛苦并告诉我我在哪里误解了如何简单地将用户实例注入 TestApplication.class -正确的方式?请。
解决方案
首先要了解的是@Component 注解的使用。当您在应用程序上下文启动期间将注释放在类上时,就像您的情况下的用户一样,用户类的构造函数通过创建用户对象并将其添加到 Spring IOC 容器来调用。要在另一个类中使用此对象,只需创建一个用户类型的属性并将@Autowired 注释放在此属性上,而不是在方法内。所以你可以在你的类的方法中使用这个属性。此外,您不需要将 @Autowired 注释放在 Users 类构造函数上。
推荐阅读
- node.js - 为什么这个具有异步功能和 Web 套接字的节点应用程序不退出?
- javascript - 将表存储在本地存储中并在第二页上检索相同的表
- c# - Xamarin.Form Android 通知生成操作窗口
- postgresql - COPY 命令运行缓慢
- alfresco - Alfresco 如何使用 java 客户端在 DB 中存储元数据
- wordpress - 如何在插件 Polylang 中显示所有语言的帖子?
- clion - CLion 的 CMake GUI
- linux - Keybase "keybased.sock: 连接无 osuch 文件或目录"
- c# - Selenium C# - 将表值与可用值进行比较
- mysql - SQL如何在同一个数据库的不同表上的相同列名中添加相同的注释