【问题标题】:How to autowire in runtime for dynamic service class and method name如何在运行时自动装配动态服务类和方法名称
【发布时间】:2019-07-13 02:17:59
【问题描述】:

我有一个项目正在进行,其中 kafka 消费者代码负责调用业务服务和方法。 在服务类具有自动装配服务之前,所有这些都可以正常工作。 这些自动装配因 NPE 而失败。

我了解在 Spring IOC 之外调用该服务不会启用自动装配。 是否有一个干净的解决方法,我的限制是我不能在业务服务端更改代码。 每个业务服务都是不同微服务的一部分。

这是从 kafka 消费者端调用方法的部分: 服务类和方法名称作为配置的一部分在运行时从 DB 中获取,并且可以更改或重新配置。 /如果重试并最终坚持失败dtls,则在try catch下调用服务/ 试试 {

        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:空 在业务服务中调用自动装配类的位置

【问题讨论】:

    标签: spring autowired


    【解决方案1】:

    解决了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2017-09-30
      相关资源
      最近更新 更多