我正在尝试让 Guice 与 Struts、Hibernate 和 Quartz 调度程序一起工作。当我在 Tomcat 下部署应用程序时,出现以下错误 -
Nov 19, 2009 2:11:26 PM com.google.inject.struts2.GuiceObjectFactory buildBean
INFO: Creating injector...
com.google.inject.CreationException: Guice configuration errors:
1) Error at com.sample.common.entity.PersistenceServiceImpl.scheduler(PersistenceServiceImpl.java:22):
Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Binding to org.quartz.Scheduler not found. No bindings to that type were found.
2) Error at com.sample.common.entity.PersistenceServiceImpl.session(PersistenceServiceImpl.java:22):
Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Binding to org.hibernate.Session not found. No bindings to that type were found.
2 error[s]
at com.google.inject.BinderImpl.createInjector(BinderImpl.java:277)
at com.google.inject.Guice.createInjector(Guice.java:79)
at com.google.inject.Guice.createInjector(Guice.java:53)
at com.google.inject.Guice.createInjector(Guice.java:43)
还有代码
@ImplementedBy(PersistenceServiceImpl.class)
public interface PersistenceService {
public void save(JobInformation dataObject);
public void remove(String jobName, String jobGroup, Class jobClass);
public List getActiveJobsFor(String userName, Class clazz) throws Exception;
}
public class PersistenceServiceImpl implements PersistenceService
{
@Inject
private Session session;
@Inject
private Scheduler scheduler;
...
}
package com.sample.common.entity;
public class ManagerModule extends AbstractModule {
protected void configure() {
bind(Session.class)
.toProvider(SessionProvider.class);
bind(Scheduler.class)
.toProvider(SchedulerProvider.class);
}
}
public class UiAction extends ActionSupport implements PrincipalAware
{
@Inject
private PersistenceService persistenceService;
....
public String doSave() throws ParseException {
persistenceService.save(data);
return doList();
}
}
还有 web.xml
<filter>
<filter-name>guice</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guice</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
谁能解释一下这个应用程序崩溃的原因吗?我从某人那里继承了这段代码,但我不完全理解如何使用 Guice 进行注入。
我怀疑这与任何 jar 或配置问题有关?
非常感谢任何帮助,
谢谢
我从某人那里继承了这段代码,但我不完全理解如何使用 Guice 进行注入。
详情请参阅Guice wiki。但大大简化了:
GuiceFilter
拦截所有调用并允许 Guice 将它们重定向到 Guice 注入的对象。
GuiceServletContextListener
的用户构建类返回正确配置的 Injecter
,Guice 将使用它来创建对象。这在您的 XML 文件中设置为侦听器。
Module
和一个或多个 ServletModule
。后者允许对 servlet、过滤器和侦听器进行基于代码的配置。
如果要猜测您的问题,那么
GuiceServletContextListener
不包含对 ManagerModule
的引用。