注入功能没起到作用,会报空指针异常,请问是什么原因呢?

public void configConstant(Constants me) {
		me.setInjectDependency(true);//配置可依赖注入
		loadPropertyFile("config/dbconfig.properties");
		me.setDevMode(true);//配置开发模式
		me.setBaseUploadPath("uploadImage");//配置上传的文件基础路径
}
	
public class SearchController extends BaseController {

	// 日志操作
	private static final Logger logger = LoggerFactory.getLogger(SearchController.class);
	// 搜索业务处理
	@Inject
	SearchService search;
	
	public void list() {
		String word = getPara("word");
		int type = getParaToInt("type",0);
		int pageNumber = getParaToInt("pageNumber",1);
		int pageSize = getParaToInt("pageSize",10);
		Integer userId = getUidBySession();
		Map<String,Object> map = search.getSearchList(pageNumber,pageSize,type,word,userId);
		renderJson(new Result<Map<String,Object>>(StatusCode.OK,map,"ok"));
	}
	
}



java.lang.NullPointerException
	at com.zyhl.whw.wiki.controller.SearchController.list(SearchController.java:143)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:75)
	at com.zyhl.whw.base.interceptor.ExceptionInterceptor.intercept(ExceptionInterceptor.java:22)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:69)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:81)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:86)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:209)
	at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2527)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2516)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

配置里面也按照说明配置了me.setInjectDependency(true);

注解也加上了,但是运行后,还是报空指针异常,请问这个是什么原因呢?(我是从3.4升到3.5的,用的是tomcat)

评论区

水晶流

2018-10-12 17:35

忘了补充一点,SearchService是一个类,不是接口

JFinal

2018-10-12 17:44

应该是你的 @Inject 注解来自于别的 jar 包,检查一下 import 是不是 com.jfinal.aop.Inject

JFinal

2018-10-12 17:47

我再稍微延展一下,为了提升性能以及简洁性,jfinal 的注入目前只针对当前类,而不会注入当前类的父类中的属性

如果确实有对父类注入的需求,建议使用:
XxxService service = Aop.get(XxxService.class);

如上所示,Aop 这个工具类可以在任何地方创建并做注入动作,如果还是不满足这样来做,可以通过继承 AopFactory 这个类,覆盖掉其中的 inject 方法,将其中只针对当前类注入的 getDeclaredFields() 再添加一个针对父类字段的获取即可

一般使用前面建议的 Aop.get(...) 就好,因为绝大部分情况都是注入当前类,而不对父类进行注入

水晶流

2018-10-12 18:02

@JFinal 的确是导错包了,改了包之后没报错了,太不细心了,多谢波哥

热门反馈

扫码入社