当前位置: 首页 > 知识库问答 >
问题:

在服务器启动时加载spring配置

姜锋
2023-03-14
 <context:annotation-config />
 <context:component-scan base-package="com.firstapp.dao"/>

 <bean id="datasource" 
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
     <property name="driverClassName" 
     value="oracle.jdbc.driver.OracleDriver"  />  
     <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />  
     <property name="username" value="system" />  
     <property name="password" value="oracle" />  
 </bean>  

<bean id="jdbcTemplate" 
      class="org.springframework.jdbc.core.JdbcTemplate">  
      <property name="dataSource" ref="datasource"></property>  
 </bean>  
 public class UserDAO 
  {
   @Autowired
   private JdbcTemplate jdbcTemplate;
   ....}
  public class UserService  
   {
      private UserDAO  userDAO  = new UserDAO ();       
    ....}
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<listener>
  <listener-class>
     org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>

共有1个答案

欧阳德运
2023-03-14

我打赌您的userDAO类没有定义为Spring bean。在这种情况下,您有两种选择:用XML定义bean或对其进行注释。

选项1:XML

ApplicationContext.xml

<bean id="userDao" class="[package of UserDAO class].UserDAO">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<context:annotation-config/>
<context:component-scan base-package="[package of UserDAO class]"/>
@Component
public class UserDAO {
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
@Component // must be a bean as well
public class DummyClass {
    private final UserDAO userDao;

    @Autowired
    public DummyClass(UserDAO userDao) {
        this.userDao = userDao;
    }
}

选项3:从应用程序上下文中手动提取Bean

我想强调的是,不推荐使用这种方法,您应该避免使用它,并正确使用依赖注入。如果您需要使用那种方法--您的应用程序的体系结构可能是错误的。

SpringBeanutil.java

@Component
public class SpringBeanUtil implements ApplicationContextAware {
    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static <T> T getBean(Class<T> beanClass) {
        return context.getBean(beanClass);
    }
}
public class UserDAO {
    private JdbcTemplate jdbcTemplate = SpringBeanUtil.getBean(JdbcTemplate.class);
}
 类似资料:
  • 当我试图启动SpringBoot主应用程序时,出现以下异常。为什么我会得到这个特例。 异常: Spring boot主java类

  • 我正在关注应用程序中的条目。 我有下面的spring云服务器应用程序代码。 我收到以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2021 02月24日01:39:52.356错误20804---[restartedMain]o.s.b.d.LoggingFailureAnalysisReporter: 应用程序无法启动 描述:

  • 我正在使用Spring方法级别的注释@cacheable来缓存我从数据库中获取的数据。我可以在服务器启动时使用上述注释执行缓存吗?我尝试了这个,但它再次从数据库而不是从缓存中获取。

  • 我正在使用Spring Boot注册服务器(Eureka服务器)。目前它正在使用以下配置。 项目名称:注册服务 内部主要方式:系统。setProperty(“spring.config.name”、“注册服务”); "yml file": 文件名:注册-服务内容: 通过以上配置,应用程序开始在2323上运行。但如果我换了Spring。配置。名称,它不工作,开始给连接拒绝异常。 > 为什么会这样?即

  • 我正在使用Angular2RC5。我希望能够在我的应用程序启动之前加载我的服务器IP地址和一些其他配置参数。我如何在最新的RC5中做到这一点? 我看过其他文章,但没有帮助: 如何在angular2中预加载配置文件:这里提供的答案是特定于webpad的。我正在使用系统js。 https://medium.com/@hasan.hameed/reading-configuration-files-in

  • 问题内容: 我正在使用spring-cache来改善数据库查询,如下所示可以正常工作: 但是现在我想在启动时预先填充完整的图书缓存。这意味着我要调用并将所有值放入缓存。该例程应仅定期进行安排。 但是在使用时如何显式填充缓存? 问题答案: 像以前一样使用缓存,添加调度程序以更新缓存,下面是代码段。 确保你将为一个参数返回对象(默认)。否则,请公开其中的方法,以避免直接使用cacheManager。