代码

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);
    }
}

访问接口http://localhost/hello

Jfinal-Controller层注入Service空指针异常_Jfinal

错误信息:空指针异常

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-Controller层注入Service空指针异常_Jfinal_02

解决方案:在Jfinal配置类中的常量配置方法中设置依赖注入为true

    @Override
    public void configConstant(Constants me) {
        /**
         * 支持 Controller、Interceptor、Validator 之中使用 @Inject 注入业务层,并且自动实现 AOP
         * 注入动作支持任意深度并自动处理循环注入
         */
        me.setInjectDependency(true);
        // 配置对超类中的属性进行注入
        me.setInjectSuperClass(true);
    }

结果:运行成功,查出数据

Jfinal-Controller层注入Service空指针异常_Jfinal_03