需要了解spring mvc项目中的autowiring bean吗?

时间:2012-05-31 11:47:18

标签: spring hibernate annotations autowired

在我的spring mvc + hibernate + annotations项目中我有这三个类

UserServiceImpl.java

@Service("userService")  
public class UserServiceImpl implements UserService {  
@Autowired  
private UserDAO userDAO;  
//other codes  
}  

UserDAOImpl.java

@Repository("userDAO")  
public class UserDAOImpl implements UserDAO {  
@Autowired  
private SessionFactory sessionFactory;  
//other codes  
}  

RegistrationController.java

@Controller  
@RequestMapping("/registration.htm")  
public class RegistrationController {  
@Autowired  
private UserService userService;  
//other codes  
}  

在我的 dispatcher-servlet.xml 中,我添加了以下内容

<context:annotation-config />  
<context:component-scan base-package="com.alw.controllers,com.alw.DAOs,com.alw.services" />  

<bean id="sessionFactory"  
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  

当我运行项目时,我遇到以下例外情况:

Error creating bean with name 'registrationController':  
Injection of autowired dependencies failed;  
nested exception is org.springframework.beans.factory.BeanCreationException:  
Could not autowire field: private com.alw.services.UserService  
    com.alw.controllers.RegistrationController.userService;  

AND

Error creating bean with name 'sessionFactory' defined in ServletContext resource  
    [/WEB-INF/dispatcher-servlet.xml]:  
Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError:  
    org/apache/commons/pool/impl/GenericObjectPool  

有些人可以指出我失踪的地方吗? 今天已经过了整整一天。

修改
我添加了commons.pool但没有结果。
我有这些例外。

Error creating bean with name 'registrationController':  
Error creating bean with name 'userService':  
Error creating bean with name 'userDAO':  
Error creating bean with name 'sessionFactory' defined in ServletContext  
    resource [/WEB-INF/dispatcher-servlet.xml]:  
Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError:  
Could not initialize class org.hibernate.cfg.AnnotationConfiguration  

感谢....

2 个答案:

答案 0 :(得分:0)

第二个很简单:你错过了CLASSPATH中包含org.apache.commons.pool.impl.GenericObjectPool的JAR。

问题是:哪个类加载器? Java EE应用服务器具有类加载器的层次结构。我猜你想把这个JAR添加到你的服务器/ lib目录中,以便在建立连接池时它可用。

第一个对我来说并不清楚。尝试将您的基础包更改为“com.alw”,看看是否将其排序。

答案 1 :(得分:0)

正如duffymo指出的那样,你的类路径中缺少commons pool。至于另一个问题,当你说你得到错误1 错误2时,你的意思是你在不同的时间得到两个不相关的错误,或者你得到错误1 错误2.如果你同时在日志中看到它们,它们可能是同一个东西,第二个是第一个原因。

另一方面,您犯了一个常见错误,即将所有服务bean放入属于DispatcherServlet的上下文中。如果您还在根上下文中声明了bean,那么这也可能导致问题。请参阅此其他答案及其链接的答案,以了解Spring MVC应用程序中的根和子上下文之间的区别:

Why DispatcherServlet creates another application context?

特别是:

Spring-MVC: What are a "context" and "namespace"?