1

我正在尝试使用 spring 完成我的第一步,但我无法让它工作,我将感谢您的帮助。

我正在使用 tomcat,并且在 tomcat lib 目录中添加了一个文件:jdbc-service.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">


<context:spring-configured />

<context:component-scan base-package="com.myproject"/>

<context:property-placeholder location="database.properties"/>

<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

我有一个 database.properties,它定义了几个用于获取 DataSource 对象的属性。我还有一个使用@Configuration 的类,它采用数据库的属性。此外,我还有另一个@Configuration 类,它继承自第一个类,并添加了 JdbcTemplate 对象,每个方法都带有 @Bean 注释。

我创建了一个 UserRepository 接口和一个名为 UserRepositoryImpl 的实现——它有一个带注释的@Autowired 成员 JdbcTemplate 和一个从 UserRepository 接口继承的方法 findById 的实现。

我有另一个名为 UserManager 的接口,它是 UserManagerImpl 的实现——它被注释为@Service,它有一个用 @Autowired 注释的成员 UserRepository。它正在实现一种 findById 的方法,并且只是尝试使用 UserRepository 从数据库中获取用户。

最后,我有一个使用成员的 servlet

@Autowired
private UserManager userManager;

问题是 userManager 为空。我认为春天没有启动,但我不知道为什么。我可能错过了一些重要的东西。

请帮助我,因为我无法进步。

提前致谢。

4

3 回答 3

1

Servlet 不是 Spring bean。它们由 tomcat 直接实例化,而不是由 Spring 实例化。因此,它们超出了 Spring 的范围,无法注入。

考虑使用 Spring MVC 控制器而不是 servlet。

于 2012-11-06T22:26:59.010 回答
0

您确定您的 UserManagerImpl 在com.myproject指定为基本包的包中吗?

于 2012-11-07T06:46:35.920 回答
0

在您的 web.xml 中指定两个上下文侦听器,但确保第一个侦听器是 Spring 的:

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

<listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
于 2016-01-25T00:19:59.353 回答