Skip to main content

class DoStuff

public class DoStuff {
    @Transactional
    public void originalMethod() {
        // do database stuff
        ...

        // do non-database stuff that is time consuming
        ...
    }
}
   
public class DoStuff {
    public void originalMethod() {
        doDatabaseStuff()

        doNonDatabaseStuff()
    }

    @Transactional
    public void doDatabaseStuff() {
        ...
    }

    public void doNonDatabaseStuff() {
        ...
    }
}
   
public class DoStuff implement ApplicationContextAware {   
private ApplicationContext CONTEXT;
public void setApplicationContext(ApplicationContext context) throws BeansException {
    CONTEXT = context;
}

    public void originalMethod() {          
        getSpringProxy().doDatabaseStuff()             
        doNonDatabaseStuff()      
    }

    private DoStuff getSpringProxy() {
        return context.getBean(this.getClass());    
    }
    @Transactional      
    public void doDatabaseStuff() {          
        ...      
    }         

    public void doNonDatabaseStuff() {          
        ...      
    }  
}
   
public class DoStuff implements Doable {
  public void originalMethod() {

  }
}

public interface Doable {
  public void originalMethod();
}