2016-05-09 5 views
7

sto creando un fagiolo dinamica utilizzando "AutowireCapableBeanFactory" come segueCome abilitare la cache per un metodo all'interno di fagioli dinamica

RegisterFoo.java

@Configuration 
public class registerFoo { 
    @Autowired 
    ApplicationContext appcontext; 

    AutowireCapableBeanFactory bf; 

    @PostConstruct 
    public void registerFoo() { 
     bf = appContext.getAutowireCapableBeanFactory(); 
     RootBeanDefinition def = new RootBeanDefinition(Foo.class); 
     ((DefaultListableBeanFactory)bf).registerBean("foo", def); 
    } 
} 

RegisterBar.java

@Configuration 
public class registerBar { 
    @Autowired 
    ApplicationContext appcontext; 

    AutowireCapableBeanFactory bf; 

    @PostConstruct 
    public void registerFoo() { 
     bf = appContext.getAutowireCapableBeanFactory(); 
     RootBeanDefinition def = new RootBeanDefinition(Bar.class); 
     Foo foo = (Foo) appContext.getBean("foo"); 
     ConstructorArgumentValues cav = new ConstructorArgumentValues(); 
     cav.add(0, foo.getValue()); 
     def.setArgumentValues(cav); 
     ((DefaultListableBeanFactory)bf).registerBean("bar", def); 
    } 
} 

Foo.class

Il metodo getValue() esegue il suo corpo ogni volta. Spring non memorizza il valore nella cache come previsto. Eventuali suggerimenti?

+0

Qualsiasi input qui è davvero apprezzato. – sag

+0

Ci sono altri posti nell'applicazione in cui la cache funziona? Tranne il bean dinamico? – Patrick

+0

@Patrick - Sì, funziona per i fagioli normali. i fagioli creati usando l'annotazione '' '@ Bean'''. – sag

risposta

1

Credo che il problema è che quando registro molla un bean con annotazione, è quindi post-elaborati da un post processore bean che gestirà @Cacheable

Quando si registra manualmente, il post-elaborazione non potrebbe portare a termine.

Impossibile verificare per il momento, ma è dove guarderò prima.

Spero che questo aiuto.

Problemi correlati