代码
Controller层
@Path("/hello")
public class HelloController extends Controller {
@Inject
UserService userService;
public void index() {
User user=userService.findById(1);
renderJson(user);
}
Service层
public class UserService {
private User dao=new User().dao();
public User findById(int id){
return dao.findById(id);
}
public void deleteById(int id){
dao.deleteById(id);
}
}
错误信息:空指针异常
3月 24, 2021 8:23:48 下午 com.jfinal.core.ActionHandler error
严重: demo.HelloController.index() : /hello
java.lang.NullPointerException
at demo.HelloController.index(HelloController.java:12)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.jfinal.aop.Invocation.invoke(Invocation.java:97)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:88)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:90)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
错误分析:idea开启调试模式进行调试,依赖注入service类为空,通过经验判断应该是service类没有交给框架容器管理,例如springboot项目中需要为service类添加@Service注解,声明此类为组件并交给容器管理。
解决方案:在Jfinal配置类中的常量配置方法中设置依赖注入为true
@Override
public void configConstant(Constants me) {
/**
* 支持 Controller、Interceptor、Validator 之中使用 @Inject 注入业务层,并且自动实现 AOP
* 注入动作支持任意深度并自动处理循环注入
*/
me.setInjectDependency(true);
// 配置对超类中的属性进行注入
me.setInjectSuperClass(true);
}
结果:运行成功,查出数据