Skip to content

框架调用从业务补偿方法时spring注入类丢失问题 #412

@BianChangcai

Description

@BianChangcai

public final class Terminator {
private Terminator() {
}

public static Object invoke(TransactionContext transactionContext, Invocation invocation, Class<? extends TransactionContextEditor> transactionContextEditorClass) {
    if (StringUtils.isNotEmpty(invocation.getMethodName())) {
        Object target = FactoryBuilder.factoryOf(invocation.getTargetClass()).getInstance();
        Method method = null;

        try {
            method = target.getClass().getMethod(invocation.getMethodName(), invocation.getParameterTypes());
        } catch (NoSuchMethodException var12) {
            throw new SystemException(var12);
        }

        ((TransactionContextEditor)FactoryBuilder.factoryOf(transactionContextEditorClass).getInstance()).set(transactionContext, target, method, invocation.getArgs());

        Object var5;
        try {
            var5 = method.invoke(target, invocation.getArgs());
        } catch (InvocationTargetException | IllegalAccessException var10) {
            throw new SystemException(var10);
        } finally {
            ((TransactionContextEditor)FactoryBuilder.factoryOf(transactionContextEditorClass).getInstance()).clear(transactionContext, target, method, invocation.getArgs());
        }

        return var5;
    } else {
        return null;
    }
}

}

Springboot 版本:2.3.5.RELEASE
TCC 版本:2.0.1
框架通过 Terminator 调用以下反射方法执行补偿逻辑时,因为 target 类中spring注入的Bean都是null,所以执行业务方法时报空指针异常,这个问题如何解决?
var5 = method.invoke(target, invocation.getArgs());

再往上看,应该是框架创建代理类时注入依赖没有问题,框架的问题望高手指点?
Object target = FactoryBuilder.factoryOf(invocation.getTargetClass()).getInstance();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions