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



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

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

因此,我正在尝试建立一个防白痴的例子,显示@Autowired和 DI "在工作",我可以在继续之前完全理解。

我尝试设置一个超级简单的Spring Boot 2项目,只有两个类; 1个包含psvm的"TesterApplication"和2个包含psvm的"Users",这是一个非常简单的类,包含一个字段"name",没有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:注解类型不适用于此类 声明

能否让一些善良的灵魂让我摆脱痛苦,并告诉我我误解了如何简单地将用户实例注入 TestApplication.class -正确的方法?请。

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

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

  3. 您可以使用构造函数@Authovired注释,如果它被其他 Spring bean 参数化以注入它们

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

最新更新