我想在java rest项目中使用spring @Autowired。在最后的日子里,我试图用Java配置来建立一个简单的Spring Java项目,而没有显式的bean配置来检查该功能。但是我无法正常工作。我可能缺少一些基本知识。
到目前为止,我在网络上和在此站点上找不到的任何方法都解决了我的问题。我也找不到我想要达到的目标的样本。这主要是由于在网络上散布着不同的Spring版本和方法。
这是我想出的Java Spring rest示例一样容易的方法。我在解释弹簧注释时添加了一些注释,我也可能在这里犯错:
应用基本类
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;
}
}
最后是应该自动装配服务的资源
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。
答案 0 :(得分:0)
您似乎正在使用场级注入。
请通过下面的链接了解所有类型的注射剂: https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/
看不到pojoService变为null的任何明确原因。 请检查pojoService bean是否已正确初始化。可能是由于pojoService bean尚未初始化,并且控制器中的null导致的。
答案 1 :(得分:0)
用nullpointer
代替NoSuchBeanDefinitionException
更表明Spring上下文根本没有加载,而不是不正确地加载。
如果您使用的是Spring Boot,请修改主类以初始化Spring:
@SpringBootApplication
@ApplicationPath("/")
public class App extends Application {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
否则(由于pom.xml代码片段未提及Spring引导),请通过初始化ClassPathXmlApplicationContext
并将<context:component-scan base-package="restoverflow" />
添加到applicationContext.xml
中来手动初始化Spring。