1. 程式人生 > >利用反射生成例項,例項內部Autowired的元件報空指標異常

利用反射生成例項,例項內部Autowired的元件報空指標異常

今天在公司做一個介面以實現對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)

問題解決~~