2016-05-09 18 views
7

ben şöyle "AutowireCapableBeanFactory" kullanarak dinamik fasulye oluşturma içinde bir yöntem için önbelleği etkinleştirmedinamik fasulye

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

public class Foo { 
    @Cacheable 
    public String getValue() { 
     // return value 
    } 
} 

GetValue() yöntemi, her defasında vücudunu yürütür. Bahar, değeri beklendiği gibi önbelleğe almaz. Baska öneri?

+0

Burada herhangi bir girdi gerçekten takdir edildi. – sag

+0

Uygulamanızda önbelleğin çalıştığı başka yerler var mı? Dinamik fasülyenin dışında mı? – Patrick

+0

@Patrick - Evet, normal fasulyeler için çalışıyor. yani fasulye, '' '@ Bean'' kullanılarak eklenmiştir. – sag

cevap

1

Sorun bahar ek açıklamanın bulunduğu bir fasulye kayıt, bunun ardından @Cacheable yönetecek bir fasulye sonrası işlemcisi tarafından sonradan işlenmiş olduğunu düşünüyorum bunu elle kayıt yaparken

, post-processing olmayabilir bitti.

Şu an için doğrulayamıyorum, ancak önce ben bakacağım yer burası.

Bu yardımın umarım.

İlgili konular