Java 在spring项目中如何在bean初始化之前重新定义类

Java 在spring项目中如何在bean初始化之前重新定义类,java,jvm-bytecode,Java,Jvm Bytecode,我在另一个jar中有一个类,我在B bean中使用它。 现在我想为类中的方法添加日志。我如何在我的项目中做到这一点而不修复jar呢 我的心: 使用ApplicationListener在bean初始化之前重新定义类 在onApplicationEvent()中执行某些操作以重新定义A类。//这是我的问题 我知道可以使用asm或其他工具来修复字节码。我看到了仪器,没有找到解决办法 一节课 public class A { public void find(){ System.out.p

我在另一个jar中有一个类,我在B bean中使用它。 现在我想为类中的方法添加日志。我如何在我的项目中做到这一点而不修复jar呢

我的心:

  • 使用ApplicationListener在bean初始化之前重新定义类

  • 在onApplicationEvent()中执行某些操作以重新定义A类。//这是我的问题

  • 我知道可以使用asm或其他工具来修复字节码。我看到了仪器,没有找到解决办法

    一节课

    public class A {
    
    public void find(){
        System.out.println("aaa");
        //i want to add log here.
    }
    
    菜豆

    @Service public class B { 
    public A get(){
        return new A();
    }
    
    应用程序侦听器

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if(event.getApplicationContext().getParent() != null){
            return;
        }
       // redefine class
    }
    
    然后,当我使用b.get().find()时,它将打印我添加的日志

    找到我的解决方案。 使用javassist修改类。并预先加载它(使用CtClass.toClass())。