当 spring 和 guice 共同存在一个项目中,且 spring 中需要访问 guice 的注入时,这个方法似乎可以使用。
(1) spring 中配置转换的 factory
<bean id="guiceBeanProvider" class="com.plusrun.util.GuiceBeanProviderFactory"/>
(2)GuiceBeanProviderFactory
package com.plusrun.util;
import com.google.inject.AbstractModule;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
import javax.servlet.ServletContext;
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.context.WebApplicationContext;
public class GuiceBeanProviderFactory<T> extends AbstractModule
implements ApplicationContextAware, BeanFactoryAware
{
private final Logger log = Logger.getLogger(GuiceBeanProviderFactory.class);
protected WebApplicationContext applicationContext;
protected static BeanFactory beanFactory;
private static BeanFactory getBeanFactory()
{
return beanFactory;
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (!(applicationContext instanceof WebApplicationContext)) {
this.log.warn("Application context is not instance of WebApplicationContext unable to provide Guice registersthrough Spring.");
}
this.applicationContext = ((WebApplicationContext)applicationContext);
}
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public T get(Class clazz) throws ClassNotFoundException
{
return (T) injector().getInstance(clazz);
}
public BeanProvider<T> getNamed(final Class clazz, final String name)
{
return new BeanProvider() {
public Object get() {
return GuiceBeanProviderFactory.this.injector().getInstance(Key.get(clazz, Names.named(name)));
}
};
}
protected void configure() {
BeanFactory beanFactory = getBeanFactory();
if (beanFactory != null) {
bind(BeanFactory.class).toInstance(beanFactory);
}
else
this.log.warn("BeanFactory not initialized Spring -> Guice Integration will not function");
}
protected Injector injector()
{
return (Injector)this.applicationContext.getServletContext().getAttribute("guice-injector");
}
}
(3)spring 配置使用
<bean id="iframeUriManager" scope="singleton" factory-bean="guiceBeanProvider" factory-method="get"
lazy-init="true">
<constructor-arg type="java.lang.Class" value="org.apache.shindig.gadgets.uri.IframeUriManager"/>
</bean>
分享到:
相关推荐
NULL 博文链接:https://cnmqw.iteye.com/blog/1243596
Arch-Linux-Install-ScriptArch_Linux_安装脚本_Arch-Linux-Installer
"cacti-plugin-arch-2.0.tar.gz" 是一个针对Cacti的插件包,用于扩展Cacti的功能,提供更丰富的监控选项。此插件名为“Arch”,可能是对系统架构或性能分析相关的增强。 该压缩包文件的名称表明它是版本2.0,通常这...
Next Generation On Demand (NGOD) Asset Architecture Comcast-SP-NGOD-ASSET-ARCH-I03-100731 Issued July 31, 2010
标题“Arch-03-08-热敏打印机集成方法”指的是关于在计算机系统或应用程序中集成热敏打印机的技术过程。热敏打印机是一种利用热敏纸进行打印的设备,广泛应用于零售、餐饮和其他需要快速、小票打印的场景。集成热敏...
在金融理论中,ARCH-M模型中的波动率常数系数可以作为风险厌恶的一个度量。然而,实证研究表明风险厌恶可能是时变的,而不仅仅是常量。基于此,Chou、Engle和Kane在1992年提出了时变系数ARCH-M模型,并认为风险厌恶...
标题“Arch-03-15- Nginx+tomcat 配置负载均衡动静分离”涉及的是在Web服务器架构中使用Nginx与Tomcat的集成,通过配置实现负载均衡和动静态资源分离。这样的架构可以提高系统的可用性和响应速度,减轻后端应用...
基于android8.1源码平台中生成的jar,亲测可用!!!!
在手册中提到的内存管理单元(MMU)是现代处理器架构中负责虚拟内存管理的组件,它将虚拟地址转换成物理地址,并提供内存保护机制。MMU通常包括一系列的转换表,也称为页表,用于存放地址转换和权限等信息。 手册中...
标题中的"Python库 | arch-4.11-cp35-cp35m-win32.whl"指的是一个特定版本的Python库,名为“arch”,版本为4.11,适用于Python 3.5解释器(由"cp35"标识),且是针对32位Windows操作系统("win32")的。"cp35m"表示...
Next Generation On Demand (NGOD) Overall Architecture Comcast-SP-NGOD-GEN-ARCH-I03-100731 Issued July 31, 2010
arch-snds100驱动程序是专为s3c44b0x处理器设计的一款核心驱动,用于管理和优化硬件资源的使用。s3c44b0x是一款由Samsung生产的微处理器,常用于嵌入式系统,如工业控制、移动设备和消费电子产品等。驱动程序在操作...
安装克隆这个仓库git clone https://github.com/jannispinter/arch-openwrt-buildroot.git构建 docker 镜像 cd arch-openwrt-buildrootdocker build -t= " arch-openwrt-buildroot:trunk " . 最后的点表示Dockerfile...
python库。 资源全名:arch-4.8.0-cp27-cp27m-win32.whl
标题中的"PyPI 官网下载 | arch-4.17-cp39-cp39-manylinux1_x86_64.whl"表明这是一个从Python Package Index(PyPI)官方源下载的软件包。PyPI是Python社区用于分发、发现和安装第三方Python模块的中央仓库。这个...
我的Arch_Linux安装步骤和日志_Arch-Linux-install-log
arch-box 同样考虑到了QEMU用户,这意味着你可以在QEMU环境中使用预构建的Arch Linux镜像,这对于开发者进行跨平台测试或在非x86架构上运行Arch Linux非常有用。 **VagrantShell** 标签可能指的是Vagrant插件,用于...
UPnP协议的设备架构版本2.0(UPnP-arch-DeviceArchitecture-v2.0)详细介绍了UPnP协议的开发流程,这其中包括寻址、发现、描述、控制、事件、展现等6个过程的具体实现。对于开发者而言,这是理解和应用UPnP协议的...
arch-model-estimation_solution.ipynb