gpt4 book ai didi

java - 简单的 Spring Java @Configuration 到 @Autowire 而不使用 @Bean

转载 作者:行者123 更新时间:2023-12-02 09:50:09 24 4
gpt4 key购买 nike

我想在 java Rest 项目中使用 spring @Autowired。在过去的几天里,我试图使用 java 配置来设置一个简单的 spring java 项目,而无需显式 bean 配置来检查该功能。但我无法让它发挥作用。我可能错过了一些基本的东西。

到目前为止,我在网络和本网站上找到的方法都没有解决我的问题。我也找不到完全符合我想要实现的目标的示例。这主要是由于网络上传播着大量不同的 Spring 版本和方法。

这是我能想到的最简单的 Java Spring 休息示例。我添加了一些关于如何解释 spring 注释的注释,因为我也可能在这里犯错误:

应用程序基类

package restoverflow;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class App extends Application {

}

配置类

package restoverflow;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration //this is a configuration class and also found by spring scan
@ComponentScan //this package and its subpackages are being checked for components and its subtypes
public class AppConfig {

}

一些Pojo

package restoverflow;

public class Pojo {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

服务

package restoverflow;

import org.springframework.stereotype.Service;

@Service //this is a subtype of component and found by the componentscan
public class PojoService {
public Pojo getPojo(){
Pojo pojo = new Pojo();
pojo.setName("pojoName");
return pojo;
}
}

最后是应该完成服务 Autowiring 的资源

package restoverflow;

import javax.ws.rs.GET;

import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/resource")
@Controller //this is a subtype of component and found by the componentscan
public class Resource {

@Autowired //this tells to automatically instantiate PojoService with a default contructor instance of PojoService
private PojoService pojoService;

@GET
@Produces(MediaType.APPLICATION_JSON)
public Pojo getPojo() {
return pojoService.getPojo();
}
}

Pom:

...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
...

我希望 pojoService 被实例化。但我得到一个 NullPointerException。

最佳答案

看起来您正在使用字段级注入(inject)。

请通过以下链接了解所有类型的注入(inject): https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/

看不到 pojoService 变为 null 的任何明确原因。请检查pojoService bean是否正确初始化。这可能是由于 pojoService bean 尚未初始化,并且您在 Controller 中得到 null 。

关于java - 简单的 Spring Java @Configuration 到 @Autowire 而不使用 @Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com