Java 来自Spring框架的类Guice解决方案
下面是一个典型的GUI“绑定”,它是在没有XML的情况下配置的: ServeModule.javaJava 来自Spring框架的类Guice解决方案,java,spring,guice,Java,Spring,Guice,下面是一个典型的GUI“绑定”,它是在没有XML的情况下配置的: ServeModule.java public class ServeModule extends ServletModule { public ServeModule() { } @Override protected void configureServlets() { filter("/*").through(ShiroFilter.class); serve(
public class ServeModule extends ServletModule {
public ServeModule() {
}
@Override
protected void configureServlets() {
filter("/*").through(ShiroFilter.class);
serve(userBaseUrl + "/ajaxLogin").with(LoginServlet.class);
}
}
public class ServeLogic extends AbstractModule {
public ServeLogic() {
}
@Override
protected void configure() {
bind(IOAuthProviderInfo.class).to(FacebookAuth.class);
bind(CreateDoc.class).toInstance(createDoc());
bind(ShiroFilter.class).in(Scopes.SINGLETON);
}
}
ServeLogic.java
public class ServeModule extends ServletModule {
public ServeModule() {
}
@Override
protected void configureServlets() {
filter("/*").through(ShiroFilter.class);
serve(userBaseUrl + "/ajaxLogin").with(LoginServlet.class);
}
}
public class ServeLogic extends AbstractModule {
public ServeLogic() {
}
@Override
protected void configure() {
bind(IOAuthProviderInfo.class).to(FacebookAuth.class);
bind(CreateDoc.class).toInstance(createDoc());
bind(ShiroFilter.class).in(Scopes.SINGLETON);
}
}
吸引人的是,应用程序只需要在web.xml中定义com.google.inject.servlet.GuiceFilter
,需要托管的每个servlet都是用java配置的
我的问题是,Spring框架是否有类似的功能
也就是说,如果我使用Spring框架,如何实现这一点?实际上,您已经通过java绑定了servlet和过滤器。
service(url…
方法将servlet绑定到特定的url,并filter(url…)
方法将过滤器绑定到特定的url
通过wmb.xml(xml方式)只需绑定GuiceFilter
()和ContextListener
()。然后,您需要通过实现GuiceServletContextListener.getInjector
方法来引导Guice注入器。您将在那里安装ServeModule
和ServeLogic
。它将如下所示:
public class MyGuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServeModule(), new ServeLogic());
}
}
web.xml:
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.example.MyGuiceServletConfig</listener-class>
</listener>
guiceFilter
com.google.inject.servlet.GuiceFilter
guiceFilter
/*
com.example.MyGuiceServletConfig
实际上,您已经通过java绑定了servlet和过滤器。service(url…
方法将servlet绑定到特定的url,并filter(url…)
方法将过滤器绑定到特定的url
通过wmb.xml(xml方式)只需绑定GuiceFilter
()和ContextListener
()。然后,您需要通过实现GuiceServletContextListener.getInjector
方法来引导Guice注入器。您将在那里安装ServeModule
和ServeLogic
。它将如下所示:
public class MyGuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServeModule(), new ServeLogic());
}
}
web.xml:
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.example.MyGuiceServletConfig</listener-class>
</listener>
guiceFilter
com.google.inject.servlet.GuiceFilter
guiceFilter
/*
com.example.MyGuiceServletConfig
是的,从3.1版开始,可以在Spring中配置不带xml的servlet。
看看下面的例子
您必须像这样实现WebApplicationInitializer
(文档中的示例):
是的,从3.1版开始,可以在Spring中配置不带xml的servlet。 看看下面的例子 您必须像这样实现
WebApplicationInitializer
(文档中的示例):
嗨,xybrek,我没听清你的问题。你能再多写一点吗?你打算干什么?什么是不清楚的?什么意思是“spring有类似的功能?”MilanBaran通过Java绑定“servlet”的方法不是用XMLHi xybrek,我不明白你的问题。你能多写一点你的意图吗?什么不清楚?什么意思是“spring有类似的功能?”MilanBaran绑定“servlet”的方法实际上,我的问题是,是否有一种方法可以使用Spring框架进行类似Guice的servlet映射?不,Guice应该能够绑定SpringBeans servlet,但我从未尝试过。使用该配置xml。圭斯没有这样的事。您必须认识到Guice是一个轻量级DI框架,而不是EE堆栈。因此,我建议您创建一个xml配置文件来满足您的需求,然后创建一个模块并在任何地方重用它。这不是太多的工作。我不是想把Guice和Spring结合起来,实际上我想要的是一种类似的“技术”,也就是说,我想用Spring代替Guice,但我希望使用Spring框架实现类似的基于Java的servet映射,而不是Guice。实际上,我的问题是,是否有办法使用Spring框架实现类似Guice的servlet映射?不,Guice应该能够绑定Spring beans servlet,但我从未尝试过。使用该配置xml。圭斯没有这样的事。您必须认识到Guice是一个轻量级DI框架,而不是EE堆栈。因此,我建议您创建一个xml配置文件来满足您的需求,然后创建一个模块并在任何地方重用它。这并不是很多工作,我并没有尝试将Guice和Spring结合起来,实际上我想要的是一种类似的“技术”,也就是说,我想使用Spring而不是Guice,但我想使用Spring框架而不是Guice来实现类似的基于Java的servet映射