Java17
报错
@Resource的对象没有成功注入,报NullPointerException错误
java.lang.NullPointerException: Cannot invoke "com.atguigu.spring6.resource.service.UserService.addUserService()" because "this.userService" is null
at com.atguigu.spring6.resource.controller.UserController.addUser(UserController.java:20)
at com.atguigu.spring6.resource.TestUserController.test(TestUserController.java:18)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
调查发现bean都生成了,但是Resource注解就是无法注入。
问题代码
1、UserController
package com.atguigu.spring6.resource.controller;
import com.atguigu.spring6.resource.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
@Controller("resUserController")
public class UserController {
private UserService userService;
@Resource(name="resUserService")
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(){
System.out.println("userController doing...");
userService.addUserService();
}
}
2、pom.xml
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>1.3.5</version>
</dependency>
问题原因
java17不兼容javax.annotation.Resource
处理方案
升级引用的jakarta版本,使用2.1.1版本,javax.annotation.Resource不存在了,需要修改为jakarta.annotation.Resource。
修改后
1、UserController
package com.atguigu.spring6.resource.controller;
import com.atguigu.spring6.resource.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import jakarta.annotation.Resource;
@Controller("resUserController")
public class UserController {
private UserService userService;
@Resource(name="resUserService")
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(){
System.out.println("userController doing...");
userService.addUserService();
}
}
2、pom.xml
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>