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

代码

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

错误信息:空指针异常

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

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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值