`
wwwlyxwww
  • 浏览: 34924 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

继承类如何在spring里注入呢?

阅读更多

我有一个BaseService接口,本意是提供一些通用的方法,具体业务Service继承这个BaseService。在BaseService内有一个BaseDao,也是提供的通用方法。

但是现在出现一个问题,在业务Service中调用继承的BaseService方法时发现,BaseDao==null,没有注入进去,这是什么原因?


具体举个例子:
BaseService如下:

Java代码 复制代码
  1. public interface BaseService {   
  2.     /**  
  3.      * 根据HQL查询数据库  
  4.      * @param hql  
  5.      * @return  
  6.      */  
  7.     public List findByHql(String hql);   
  8. }  
public interface BaseService {
    /**
     * 根据HQL查询数据库
     * @param hql
     * @return
     */
    public List findByHql(String hql);
}



BaseService实现类:

Java代码 复制代码
  1. public class BaseServiceImpy implements BaseService {   
  2.     private BaseDao baseDao;   
  3.     public List findBySql(String sql) {   
  4.         return this.baseDao.findBySql(sql);   //这里baseDao == null   
  5.     }   
  6.   
  7. //setter, getter   
  8.     public BaseDao getBaseDao() {   
  9.         return baseDao;   
  10.     }   
  11.   
  12.     public void setBaseDao(BaseDao baseDao) {   
  13.         this.baseDao = baseDao;   
  14.     }   
  15. }  
public class BaseServiceImpy implements BaseService {
    private BaseDao baseDao;
    public List findBySql(String sql) {
        return this.baseDao.findBySql(sql);   //这里baseDao == null
    }

//setter, getter
    public BaseDao getBaseDao() {
        return baseDao;
    }

    public void setBaseDao(BaseDao baseDao) {
        this.baseDao = baseDao;
    }
}



我有一个业务Service:

Java代码 复制代码
  1. public interface SysActionService extends BaseService{   
  2.     //未定义任何方法,调用BaseService中的方法   
  3. }  
public interface SysActionService extends BaseService{
    //未定义任何方法,调用BaseService中的方法
}



实现类:

Java代码 复制代码
  1. public class SysActionServiceImpy extends BaseServiceImpy implements SysActionService{   
  2.   
  3.     private static Log log = LogFactory.getLog(SysActionService.class);   
  4.     private SysActionDao sysActionDao;   
  5.     public SysActionDao getSysActionDao() {   
  6.         return sysActionDao;   
  7.     }   
  8.     public void setSysActionDao(SysActionDao sysActionDao) {   
  9.         this.sysActionDao = sysActionDao;   
  10.     }   
  11. }  
public class SysActionServiceImpy extends BaseServiceImpy implements SysActionService{

    private static Log log = LogFactory.getLog(SysActionService.class);
    private SysActionDao sysActionDao;
    public SysActionDao getSysActionDao() {
        return sysActionDao;
    }
    public void setSysActionDao(SysActionDao sysActionDao) {
        this.sysActionDao = sysActionDao;
    }
}



spring配置如下:

Xml代码 复制代码
  1. <bean id="baseDao" class="com.dao.impy.BaseDaoImpy">  
  2.       <property name="sessionFactory" ref="sessionFactory" />  
  3.   </bean>  
  4.   <bean id="baseService" class="com.impy.BaseServiceImpy">  
  5.       <property name="baseDao" ref="baseDao"></property>  
  6.   </bean>  
  7.   <bean id="sysActionDao" class="com.dao.impy.SysActionDaoImpy">  
  8.       <property name="sessionFactory" ref="sessionFactory" />  
  9.   </bean>  
  10.   <bean id="sysActionService" class="com.service.impy.SysActionServiceImpy">  
  11.       <property name="sysActionDao" ref="sysActionDao" />  
  12.   </bean>  
  <bean id="baseDao" class="com.dao.impy.BaseDaoImpy">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean id="baseService" class="com.impy.BaseServiceImpy">
        <property name="baseDao" ref="baseDao"></property>
    </bean>
    <bean id="sysActionDao" class="com.dao.impy.SysActionDaoImpy">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean id="sysActionService" class="com.service.impy.SysActionServiceImpy">
        <property name="sysActionDao" ref="sysActionDao" />
    </bean>


我在Struts2的Action中注入了sysActionService,调用:

Java代码 复制代码
  1. sysActionService.findByHql("from SysAction");  
sysActionService.findByHql("from SysAction");



断点发现,执行到BaseServcie的时候,baseDao== null.
为什么这个baseDao没注入进去呢?baseService中set/get方法都有啊

 

 

回答

<bean id="sysActionService" class="com.service.impy.SysActionServiceImpy" parent="baseService"
      <property name="sysActionDao" ref="sysActionDao" /> 
  </bean>

要用parent属性来指定。
分享到:
评论

相关推荐

    继承 空指针 spring

    为了防止这种情况,我们需要确保在Spring的XML配置文件中定义了一个`HibernateTemplate` bean,并将其注入到继承自`HibernateDaoSupport`的DAO类中。例如: ```xml &lt;bean id="myHibernateTemplate" class="org....

    Spring的配置以及事件注入

    当你有一个事件需要在整个应用中传播时,可以创建一个自定义的事件类,继承自ApplicationEvent。例如: ```java public class CustomEvent extends ApplicationEvent { private String eventData; public ...

    spring jersey整合后无法注入

    1. **未正确配置Spring上下文**:确保在你的项目中包含Spring的上下文配置文件,如`applicationContext.xml`,并且在这个配置文件中声明了你需要注入的bean。例如,如果你有一个名为`MyService`的服务类,你应该声明...

    Quartz注入Spring的Bean

    3. **Spring注入Bean到Job**:在Job执行时,我们可以直接注入其他由Spring管理的Bean,无需在Job中创建这些对象,从而减少了代码的复杂性,增强了可重用性。 4. **JobFactory的自定义**:Quartz默认使用...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate继承自`JdbcAccessor`,包含了事务管理的支持。它可以自动将数据库操作封装在事务中,当出现异常时,会回滚事务,确保数据的一致性。 6. **异常处理** SpringJdbcTemplate将底层JDBC抛出的异常...

    Spring系列面试题129道(附答案解析)

    在Spring中可以通过在XML配置文件中添加context命名空间并声明注解驱动元素,或者使用Java配置类上的注解(如@ComponentScan)来启动注解装配。 27、@Component,@Controller,@Repository,@Service有何区别? 这些...

    学习Spring教程时,无法继承SpringBeanAutowiringSupport类

    在Spring框架中,`SpringBeanAutowiringSupport` 类是一个重要的辅助类,它提供了一些功能,使得其他类能够方便地实现自动装配。然而,在实际学习和使用过程中,遇到"无法继承SpringBeanAutowiringSupport类"的问题...

    第七章 Spring4 继承、依赖、引用

    在Spring框架中,继承、依赖和引用是核心的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)概念的重要组成部分。这些概念对于理解和使用Spring框架进行应用开发至关重要。以下是对...

    spring试题(含答案)

    setter 注入的优点包括通过 setter 方法设定依赖关系更加直观自然、当依赖关系(或继承关系)较复杂时,构造注入方式的构造函数相当庞大,此时若使用设值注入方式则简单快捷。构造方法注入的优点包括把创建完整、...

    在springboot中使用注解将值注入参数的操作

    本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了定义注解、定义注解处理类、使 Spring Boot 支持该拦截器三个方面的内容。 一、定义注解 在 Spring Boot 中,定义注解需要使用 @interface ...

    Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring使用@Autowired为抽象父类注入依赖代码实例 Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象...

    使用Spring降低类之间的耦合

    而在Spring中,我们可以通过XML配置文件、注解或者Java配置类来声明对象及其依赖,Spring容器负责管理这些对象的生命周期,按需注入所需的依赖。这样,每个类只需要关注自身的业务逻辑,无需关心依赖对象如何创建和...

    testNG集成spring

    在集成Spring和TestNG的过程中,只需让测试类继承`AbstractTestNGSpringContextTests`或`AbstractTransactionalTestNGSpringContextTests`等Spring提供的支持类,即可实现对Spring管理的对象进行测试而无需手动加载...

    Spring中依赖注入与容器

    在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心概念,它们旨在简化组件之间的耦合,提高代码的可测试性和可维护性。IoC指的是应用程序的控制权由原本...

    尚学堂Spring学习笔记

    1. 定义一个属性编辑器的类,这个类要继承Spring中的spring.beans.PropertyEditorSupport类。 2. 在Spring的配置文件中配置属性编辑器的bean。 3. 在需要注入Date类型属性的类的bean的配置文件中直接使用属性注入就...

    Spring通过在classpath自动扫描方式把组件纳入spring容器中管理

    4. **元注解识别**: Spring不仅能识别直接在类上的注解,还能查找类上的元注解。例如,如果一个类被`@Service`注解,而`@Service`又继承了`@Component`,那么即使类本身没有`@Component`,Spring也会发现这个bean。 ...

    Spring和Struts整合---继承ActionSupport的方法

    2. **配置Spring**: 在Spring的配置文件中声明Action类,通过`&lt;bean&gt;`标签定义,并设置其属性以注入依赖。 3. **配置Struts**: 在struts.xml中配置Action,但不再定义Action类,而是引用Spring中定义的bean。 4. *...

    Spring简单模拟Spring容器

    例如,我们可以使用`&lt;bean&gt;`标签在XML中定义一个bean,或者在Java类上使用`@Component`、`@Service`、`@Repository`和`@Controller`等注解来标记为Spring管理的组件。 在描述中提到的博客链接没有具体内容,但通常...

    spring-cloud 集成 flowable 工作流

    集成Flowable到Spring Cloud服务中,我们需要创建一个配置类,利用Spring Boot的自动配置功能来启动Flowable的服务。通过`@EnableFlowable`注解开启Flowable的支持,同时使用`@Bean`定义流程引擎实例。 ```java @...

Global site tag (gtag.js) - Google Analytics