我有一个BaseService接口,本意是提供一些通用的方法,具体业务Service继承这个BaseService。在BaseService内有一个BaseDao,也是提供的通用方法。
但是现在出现一个问题,在业务Service中调用继承的BaseService方法时发现,BaseDao==null,没有注入进去,这是什么原因?
具体举个例子:
BaseService如下:
- public interface BaseService {
-
-
-
-
-
-
public List findByHql(String hql);
- }
public interface BaseService {
/**
* 根据HQL查询数据库
* @param hql
* @return
*/
public List findByHql(String hql);
}
BaseService实现类:
- public class BaseServiceImpy implements BaseService {
-
private BaseDao baseDao;
-
public List findBySql(String sql) {
-
return this.baseDao.findBySql(sql);
- }
-
-
-
public BaseDao getBaseDao() {
-
return baseDao;
- }
-
-
public void setBaseDao(BaseDao baseDao) {
-
this.baseDao = baseDao;
- }
- }
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:
- public interface SysActionService extends BaseService{
-
- }
public interface SysActionService extends BaseService{
//未定义任何方法,调用BaseService中的方法
}
实现类:
- 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;
- }
- }
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配置如下:
- <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>
<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,调用:
- 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的XML配置文件中定义了一个`HibernateTemplate` bean,并将其注入到继承自`HibernateDaoSupport`的DAO类中。例如: ```xml <bean id="myHibernateTemplate" class="org....
当你有一个事件需要在整个应用中传播时,可以创建一个自定义的事件类,继承自ApplicationEvent。例如: ```java public class CustomEvent extends ApplicationEvent { private String eventData; public ...
1. **未正确配置Spring上下文**:确保在你的项目中包含Spring的上下文配置文件,如`applicationContext.xml`,并且在这个配置文件中声明了你需要注入的bean。例如,如果你有一个名为`MyService`的服务类,你应该声明...
3. **Spring注入Bean到Job**:在Job执行时,我们可以直接注入其他由Spring管理的Bean,无需在Job中创建这些对象,从而减少了代码的复杂性,增强了可重用性。 4. **JobFactory的自定义**:Quartz默认使用...
SpringJdbcTemplate继承自`JdbcAccessor`,包含了事务管理的支持。它可以自动将数据库操作封装在事务中,当出现异常时,会回滚事务,确保数据的一致性。 6. **异常处理** SpringJdbcTemplate将底层JDBC抛出的异常...
在Spring中可以通过在XML配置文件中添加context命名空间并声明注解驱动元素,或者使用Java配置类上的注解(如@ComponentScan)来启动注解装配。 27、@Component,@Controller,@Repository,@Service有何区别? 这些...
在Spring框架中,`SpringBeanAutowiringSupport` 类是一个重要的辅助类,它提供了一些功能,使得其他类能够方便地实现自动装配。然而,在实际学习和使用过程中,遇到"无法继承SpringBeanAutowiringSupport类"的问题...
在Spring框架中,继承、依赖和引用是核心的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)概念的重要组成部分。这些概念对于理解和使用Spring框架进行应用开发至关重要。以下是对...
setter 注入的优点包括通过 setter 方法设定依赖关系更加直观自然、当依赖关系(或继承关系)较复杂时,构造注入方式的构造函数相当庞大,此时若使用设值注入方式则简单快捷。构造方法注入的优点包括把创建完整、...
本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了定义注解、定义注解处理类、使 Spring Boot 支持该拦截器三个方面的内容。 一、定义注解 在 Spring Boot 中,定义注解需要使用 @interface ...
Spring使用@Autowired为抽象父类注入依赖代码实例 Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象...
而在Spring中,我们可以通过XML配置文件、注解或者Java配置类来声明对象及其依赖,Spring容器负责管理这些对象的生命周期,按需注入所需的依赖。这样,每个类只需要关注自身的业务逻辑,无需关心依赖对象如何创建和...
在集成Spring和TestNG的过程中,只需让测试类继承`AbstractTestNGSpringContextTests`或`AbstractTransactionalTestNGSpringContextTests`等Spring提供的支持类,即可实现对Spring管理的对象进行测试而无需手动加载...
在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心概念,它们旨在简化组件之间的耦合,提高代码的可测试性和可维护性。IoC指的是应用程序的控制权由原本...
1. 定义一个属性编辑器的类,这个类要继承Spring中的spring.beans.PropertyEditorSupport类。 2. 在Spring的配置文件中配置属性编辑器的bean。 3. 在需要注入Date类型属性的类的bean的配置文件中直接使用属性注入就...
4. **元注解识别**: Spring不仅能识别直接在类上的注解,还能查找类上的元注解。例如,如果一个类被`@Service`注解,而`@Service`又继承了`@Component`,那么即使类本身没有`@Component`,Spring也会发现这个bean。 ...
2. **配置Spring**: 在Spring的配置文件中声明Action类,通过`<bean>`标签定义,并设置其属性以注入依赖。 3. **配置Struts**: 在struts.xml中配置Action,但不再定义Action类,而是引用Spring中定义的bean。 4. *...
例如,我们可以使用`<bean>`标签在XML中定义一个bean,或者在Java类上使用`@Component`、`@Service`、`@Repository`和`@Controller`等注解来标记为Spring管理的组件。 在描述中提到的博客链接没有具体内容,但通常...
集成Flowable到Spring Cloud服务中,我们需要创建一个配置类,利用Spring Boot的自动配置功能来启动Flowable的服务。通过`@EnableFlowable`注解开启Flowable的支持,同时使用`@Bean`定义流程引擎实例。 ```java @...