2014-04-24 20 views
5

Czy jest możliwe uzyskanie tego samego dziedziczenia fasoli za pomocą konfiguracji opartej na adnotacjach (@Bean itd.)?Dziedziczenie definicji fasoli z adnotacjami?

<bean id="inheritedTestBean" abstract="true" 
     class="org.springframework.beans.TestBean"> 
    <property name="name" value="parent"/> 
    <property name="age" value="1"/> 
</bean> 

<bean id="inheritsWithDifferentClass" 
     class="org.springframework.beans.DerivedTestBean" 
     parent="inheritedTestBean" init-method="initialize"> 
    <property name="name" value="override"/> 
    <!-- the age property value of 1 will be inherited from parent --> 
</bean> 

http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#beans-child-bean-definitions

Odpowiedz

9

Nie ma pojęcie abstrakcyjne fasoli w Javie config ponieważ język Java ma już wszystko, czego potrzeba. Nie zapominaj, że abstrakcyjne ziarna nie są w ogóle eksponowane w kontekście, to jakiś szablon.

Można przepisać kod powyżej następująco:

@Configuration 
public class Config { 

    @Bean 
    public DerivedTestBean() { 
     DerivedTestBean bean = new DerivedTestBean(); 
     initTestBean(bean); 
     bean.setName("override"); 
     return bean; 
    } 

    private void initTestBean(TestBean testBean) { 
     testBean.setName("parent"); 
     testBean.setAge(1); 
    } 
} 

Jeśli initTestBean powinny być dzielone, można równie dobrze zrobić to publiczne i wstrzyknąć Config w innych miejscach, jeśli zajdzie taka potrzeba.

Powiązane problemy