我正在进行一个项目,其中kafka消费者代码负责调用业务服务和方法。 所有这些都可以正常工作,直到服务类具有自动连接的服务为止。 那些自动装配因NPE而失败。
我知道在Spring IOC之外调用服务不会启用自动装配。 是否有一个干净的解决方法,我的约束是我不能在业务服务端更改代码。 每个业务服务都是不同的微服务的一部分。
这是从kafka用户端调用方法的片段: 服务类和方法名称是在运行时从DB获得的,作为配置的一部分,可以更改或重新配置。 / 此处的呼叫服务在重试后尝试捕获,最后允许出现故障的dtls / 尝试{
Class<?> c = Class.forName(sdfServiceClass);
Method consumerMethod
= c.getDeclaredMethod(
sdfServiceMethod, Context.class, Object.class, String.class);
Context context_con = (Context) result[0];
consumerMethod.invoke(c.newInstance(), context_con, result[1], messageuid_con);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |
InstantiationException | InvocationTargetException e) {
上面被调用的业务服务:
公共类serviceclassA {
@Autowired
private JobLocator jobLocator;
@Autowired
@Qualifier("sbjobLauncher")
private SimpleJobLauncher sbjobLauncher;
@Autowired
JobRepository jobRepository;
@Autowired
SbJobService sbJobService;
public void ServiceMethod(Context context, Object item, String messageUid) {
问题是此类具有自动接线,而该接线不是由Spring IOC发起的。
错误: java.lang.NullPointerException:空 在业务服务中调用自动装配类的地方
答案 0 :(得分:0)
已解决:
Class c = Class.forName(sdfServiceClass);
Object listnerClass =Class.forName(sdfServiceClass).newInstance();
autowireCapableBeanFactory.autowireBean(listnerClass);
Method consumerMethod
= c.getDeclaredMethod(
sdfServiceMethod, Context.class, Object.class, String.class);
Context context_con = (Context) result[0];
consumerMethod.invoke(listnerClass, context_con, result[1], messageuid_con);