Java Spring Boot 2 |非常基本的依赖项注入@自动连线问题
JavaSpringBoot2非常新。我确信这是一个非常愚蠢的问题 背景: 对我来说,我首先需要看到并理解一个概念的一个非常简单的实现,然后才能开始推断这个概念或技术的实用性 因此,我试图建立一个白痴证明的例子,显示@Autowired和DI“在工作”,在继续之前我可以完全理解 我试图用两个类建立一个超级简单的SpringBoot2项目;“TesterApplication”包含psvm和“Users”,后者是一个非常简单的类,包含一个字段“name”,没有参数构造函数。请参见图片: PSVM在这里:Java Spring Boot 2 |非常基本的依赖项注入@自动连线问题,java,spring,spring-boot,Java,Spring,Spring Boot,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
注释@authovided
注释首先要了解的是@Component注释的使用。当您在应用程序上下文启动期间将注释放置在一个类上,就像您的case Users一样,通过创建一个Users对象并将其添加到Spring IOC容器来调用Users类的构造函数。要在另一个类中使用此对象,只需创建一个Users类型的属性,并将@Autowired注释放在该属性上,而不是放在方法中。因此,您可以在类的方法中使用此属性。此外,您不需要将@Autowired注释放在用户类构造函数上。请发布代码,不要使用图像。尤其是因为您犯了多个错误@Petermm-好的,我已经用代码替换了图像。@Robert Moskal-如果我没有犯错误,你认为我会寻求帮助吗;-)您应该知道,Springbean通常遵循单例模式,这意味着按照您定义它的方式,始终只有一个“Users”实例。此外,尝试自动连线的方式也不正确。我不能像你一样在静态环境中自动连线。它应该是一个类的非静态字段。我只想再注意一点。静态main方法将无法访问像用户这样的实例成员。它甚至不会编译。所以你需要找到另一种方法来测试这一点。谢谢,是的,我明白你的意思,这是一个糟糕的例子。我可能会添加一个@Controller并通过发送http请求来测试它。