利用反射生成例項,例項內部Autowired的元件報空指標異常
阿新 • • 發佈:2018-12-26
今天在公司做一個介面以實現對mq佇列中拋異常的訊息進行訊息重發。程式碼如下:
//前端傳的引數
String consumerName = "dispenseConsumer";
String methodName = methodName;
String param = param;
Class cla = Class.forName(consumerName);
Method method = cla.getMethod(methodName,String.class);
method.invoke(cla.newInstance(),param );
DispenseConsumer程式碼如下:
@Service
public Class DispenseConsumer{
@Autowired
private AnService anService;
public void dosth(){
anService.doMethod();//這步拋空指標
}
}
在method.invoke(cla.newInstance(),param );中,報了空指標異常!
原來是cla.newInstance()生成的示例中,是獲取不到用@Autowired注入的元件的!
解決方法如下:
1.在DispenseConsumer的@Service註解加個名字以方便在Spring容器中獲得:@Service("dispenseConsumer")
2.method.invoke(ApplicationContextUtils.getBean("dispenseConsumer"),param)
問題解決~~