Spring中父类的依赖可自动注入到子类中吗?

时间:2022-01-18 20:33:19
比如有类A和类B,   
  public   class   A   {   
      String   a;   
      String   b;   
        //a和b的get,set方法   
        .....   
  }   
  public   class   B   extends   A{   
          String   c;   
            String   fn(){   
              return   a+b+c;   
  }   
  }   
    
    
  现在在a.xml中配置好A,并注入属性   a和b   
  <?xml   version="1.0"   encoding="UTF-8"?>   
  <!DOCTYPE   beans   PUBLIC   "-//SPRING//DTD   BEAN//EN"   
      "http://www.springframework.org/dtd/spring-beans.dtd">   
    
  <beans>   
      <bean   id="bean1"   class="A">   
        <property   name="a">   
            <value>1</value>   
      </property>     
                    <property   name="b">   
            <value>2</value>   
      </property>     
  </bean>   
  </beans>   
    
  在b.xml中配置B   
    
  <!DOCTYPE   beans   PUBLIC   "-//SPRING//DTD   BEAN//EN"   
      "http://www.springframework.org/dtd/spring-beans.dtd">   
    
  <beans>   
      <bean   id="bean2"   class="B">   
        <property   name="c">   
            <value>3</value>   
      </property>     
                
  </bean>   
  </beans>   
    
  现在,Spring初始化a.xml,b.xml。获取Bean   B后,调用其b.f()方法却输出“3”,可是我希望它输出“123”,因为我需要B的父类即A的依赖自动传递给B,那么我该如何配置?(a.xml和b.xml不能合并)

如果用parent的话是可以解决,但我看有个项目例子不用parent,不知道是什么原因?请知道的回答一下,谢谢。

5 个解决方案

#1


再设置一个parent.xml 
<beans>  
      <bean  id="abstractbean"  abstract=true>  
        <property  name="a">  
            <value>1 </value>  
        </property>    
        <property  name="b">  
            <value>2 </value>  
        </property>    
      </bean>  
 </beans>  

a.xml
<beans>  
      <bean  id="abstractbean"  class="B" parent="abstractbean">  
 </beans>  

b.xml

<beans>  
      <bean  id="abstractbean"  class="A" parent="abstractbean"/> 
         <property  name="c">  
            <value>3 </value>  
         </property> 
      </bean>
 </beans> 

#2


a.xml和b.xml中class属性弄反了~~~

#3


用parent就是再注入一次,等同于下面的代码,不用parent的话可以实现嘛?关注
   <bean id="bean2" class="B">
   <property  name="a"> 
                    <value>1</value> 
           </property>   
             <property  name="b"> 
                    <value>2</value> 
             </property> 
   <property name="c">
   <value>3</value>
   </property>
   </bean> 

#4



<beans> 
<bean id="spot.spotDao" class="com.danlong.spot.dao.impl.SpotDaoImpl" parent="daoTemplate"></bean>

 <bean id="spot.spotManager" parent="txProxyTemplate">
<property name="proxyInterfaces">
<list>
<value>com.danlong.spot.service.SpotManager</value>
</list>
</property>
<property name="target">
<ref bean="spot.spotManagerImpl"/>
</property>
</bean>

<bean id="spot.spotManagerImpl" 
class="com.danlong.spot.service.impl.SpotManangerImpl" parent="com.danlong.common.service.imp.BaseManager">
<property name="spotDao">
<ref bean="spot.spotDao"/>
</property>
</bean>
</beans>


如同上面的配置,SpotManangerImpl已经继承了BaseManager,如果不用parent的话,BaseManager属性的依赖注入就实现不了,报空指针。难道一定要用parent吗?

#5


如果不是parent的话,只能在子类将父类再注入一遍,其实parent也就是干了这个操作,等高手来给出不同的方案,持续关注中,而且如果父类的代码不可见的话,就好象只能这样注入,无法写annoation注入

#1


再设置一个parent.xml 
<beans>  
      <bean  id="abstractbean"  abstract=true>  
        <property  name="a">  
            <value>1 </value>  
        </property>    
        <property  name="b">  
            <value>2 </value>  
        </property>    
      </bean>  
 </beans>  

a.xml
<beans>  
      <bean  id="abstractbean"  class="B" parent="abstractbean">  
 </beans>  

b.xml

<beans>  
      <bean  id="abstractbean"  class="A" parent="abstractbean"/> 
         <property  name="c">  
            <value>3 </value>  
         </property> 
      </bean>
 </beans> 

#2


a.xml和b.xml中class属性弄反了~~~

#3


用parent就是再注入一次,等同于下面的代码,不用parent的话可以实现嘛?关注
   <bean id="bean2" class="B">
   <property  name="a"> 
                    <value>1</value> 
           </property>   
             <property  name="b"> 
                    <value>2</value> 
             </property> 
   <property name="c">
   <value>3</value>
   </property>
   </bean> 

#4



<beans> 
<bean id="spot.spotDao" class="com.danlong.spot.dao.impl.SpotDaoImpl" parent="daoTemplate"></bean>

 <bean id="spot.spotManager" parent="txProxyTemplate">
<property name="proxyInterfaces">
<list>
<value>com.danlong.spot.service.SpotManager</value>
</list>
</property>
<property name="target">
<ref bean="spot.spotManagerImpl"/>
</property>
</bean>

<bean id="spot.spotManagerImpl" 
class="com.danlong.spot.service.impl.SpotManangerImpl" parent="com.danlong.common.service.imp.BaseManager">
<property name="spotDao">
<ref bean="spot.spotDao"/>
</property>
</bean>
</beans>


如同上面的配置,SpotManangerImpl已经继承了BaseManager,如果不用parent的话,BaseManager属性的依赖注入就实现不了,报空指针。难道一定要用parent吗?

#5


如果不是parent的话,只能在子类将父类再注入一遍,其实parent也就是干了这个操作,等高手来给出不同的方案,持续关注中,而且如果父类的代码不可见的话,就好象只能这样注入,无法写annoation注入