@Autowired beans 在 spring 3.1 中使用 beans:profiles 后未加载

2023-12-07

我用过beans:profiles在我的 xml 中是这样的:

    <beans profile="dev">
        <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.internal.url}" />
            <property name="username" value="${jdbc.internal.username}" />
        </bean>
   </beans>

我已经设置了spring.active.profiles在 web.xml 中:

<servlet>
    <servlet-name>myapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/myapp-servlet.xml</param-value>
    </init-param>
    <init-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>dev</param-value>
    </init-param>
</servlet>

我的代码结构是这样的:

//controller
@Controller 
public class MyController {
  @Autowired
  private MyService myService;
  ....
}

//service implementation
@Service("myservice")
public class MyServiceImpl implements MyService {
  @Autowired
  DBService dbService;
} 

//db service
@Service("dbservice)
public class DBServiceImpl implements DbService {
  @Autowired
  public void setDataSource (Datasource ds) { 
    this.jdbcTemplate = new JdbcTemplate(ds);
  }
}

Error:

创建名称为“myController”的 bean 时出错:注入 自动装配依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法 自动装配字段:私有 MyService MyController.myService; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:

嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“dbService”的 bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法 自动装配方法:public void DBServiceImpl.setDataSource(javax.sql.DataSource);嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:否 找到依赖关系的 [javax.sql.DataSource] 类型的匹配 bean: 预计至少有 1 个有资格作为自动装配候选者的 bean 这种依赖。依赖注释:{} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)


我猜您正在 DispatcherServlet 上下文中使用配置文件,而 DataSource 可能位于根应用程序上下文中。

See Spring框架中applicationContext.xml和spring-servlet.xml之间的区别

update:尝试使用上下文参数(取自here):

<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Autowired beans 在 spring 3.1 中使用 beans:profiles 后未加载 的相关文章

随机推荐