`

Arch-03-21- Spring 中调用 Guice 中的注入

 
阅读更多

当 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>
分享到:
评论

相关推荐

    Arch-03-24- Spring Security 应用

    NULL 博文链接:https://cnmqw.iteye.com/blog/1243596

    cacti-plugin-arch-2.0.tar.gz

    "cacti-plugin-arch-2.0.tar.gz" 是一个针对Cacti的插件包,用于扩展Cacti的功能,提供更丰富的监控选项。此插件名为“Arch”,可能是对系统架构或性能分析相关的增强。 该压缩包文件的名称表明它是版本2.0,通常这...

    Comcast-SP-NGOD-ASSET-ARCH-I03-100731-FINAL-Coship.pdf

    Next Generation On Demand (NGOD) Asset Architecture Comcast-SP-NGOD-ASSET-ARCH-I03-100731 Issued July 31, 2010

    Arch-03-08-热敏打印机集成方法

    标题“Arch-03-08-热敏打印机集成方法”指的是关于在计算机系统或应用程序中集成热敏打印机的技术过程。热敏打印机是一种利用热敏纸进行打印的设备,广泛应用于零售、餐饮和其他需要快速、小票打印的场景。集成热敏...

    Arch-Linux-Install-ScriptArch_Linux_安装脚本_Arch-Linux-Insta

    正文中,我们首先需要明确的是,Arch_Linux_安装脚本或Arch-Linux-Install-Script,实际上是关于Linux操作系统中一种名为Arch Linux的发行版的安装脚本。Arch Linux是一个轻量级、灵活和面向社区的Linux发行版,它以...

    变系数ARCH-M模型的ARCH效应检验

    在金融理论中,ARCH-M模型中的波动率常数系数可以作为风险厌恶的一个度量。然而,实证研究表明风险厌恶可能是时变的,而不仅仅是常量。基于此,Chou、Engle和Kane在1992年提出了时变系数ARCH-M模型,并认为风险厌恶...

    Arch-03-15- Nginx+tomcat 配置负载均衡动静分离

    标题“Arch-03-15- Nginx+tomcat 配置负载均衡动静分离”涉及的是在Web服务器架构中使用Nginx与Tomcat的集成,通过配置实现负载均衡和动静态资源分离。这样的架构可以提高系统的可用性和响应速度,减轻后端应用...

    apptoolkit-arch-core-common.jar

    基于android8.1源码平台中生成的jar,亲测可用!!!!

    openrisc-arch-1.0-rev0

    在手册中提到的内存管理单元(MMU)是现代处理器架构中负责虚拟内存管理的组件,它将虚拟地址转换成物理地址,并提供内存保护机制。MMU通常包括一系列的转换表,也称为页表,用于存放地址转换和权限等信息。 手册中...

    Arch_Linux_盒装安装媒介的小盒子_arch-media-box-typst.zip

    从这个压缩包中提取出来的arch-media-box-typst-main文件可能是一个关键的文件夹或者文档,它包含了安装过程中需要的核心文件。这个文件可能包含了所有安装脚本、配置文件、软件包列表和其他工具,这些都是安装Arch ...

    Python库 | arch-4.11-cp35-cp35m-win32.whl

    标题中的"Python库 | arch-4.11-cp35-cp35m-win32.whl"指的是一个特定版本的Python库,名为“arch”,版本为4.11,适用于Python 3.5解释器(由"cp35"标识),且是针对32位Windows操作系统("win32")的。"cp35m"表示...

    Comcast-SP-NGOD-GEN-ARCH-103-100731.pdf

    Next Generation On Demand (NGOD) Overall Architecture Comcast-SP-NGOD-GEN-ARCH-I03-100731 Issued July 31, 2010

    arch-snds100驱动程序

    arch-snds100驱动程序是专为s3c44b0x处理器设计的一款核心驱动,用于管理和优化硬件资源的使用。s3c44b0x是一款由Samsung生产的微处理器,常用于嵌入式系统,如工业控制、移动设备和消费电子产品等。驱动程序在操作...

    Python库 | arch-4.8.0-cp27-cp27m-win32.whl

    python库。 资源全名:arch-4.8.0-cp27-cp27m-win32.whl

    arch-openwrt-buildroot:基于 Arch Linux 的 OpenWrt buildroot docker 镜像

    安装克隆这个仓库git clone https://github.com/jannispinter/arch-openwrt-buildroot.git构建 docker 镜像 cd arch-openwrt-buildrootdocker build -t= " arch-openwrt-buildroot:trunk " . 最后的点表示Dockerfile...

    PyPI 官网下载 | arch-4.17-cp39-cp39-manylinux1_x86_64.whl

    标题中的"PyPI 官网下载 | arch-4.17-cp39-cp39-manylinux1_x86_64.whl"表明这是一个从Python Package Index(PyPI)官方源下载的软件包。PyPI是Python社区用于分发、发现和安装第三方Python模块的中央仓库。这个...

    arch-box:Arch-box为不同的提供程序和后处理器(只读镜像)提供了Arch Linux版本的自动构建。

    arch-box 同样考虑到了QEMU用户,这意味着你可以在QEMU环境中使用预构建的Arch Linux镜像,这对于开发者进行跨平台测试或在非x86架构上运行Arch Linux非常有用。 **VagrantShell** 标签可能指的是Vagrant插件,用于...

    UPnP-arch-DeviceArchitecture-v2.0

    UPnP协议的设备架构版本2.0(UPnP-arch-DeviceArchitecture-v2.0)详细介绍了UPnP协议的开发流程,这其中包括寻址、发现、描述、控制、事件、展现等6个过程的具体实现。对于开发者而言,这是理解和应用UPnP协议的...

    arch-model-estimation_solution.ipynb

    arch-model-estimation_solution.ipynb

Global site tag (gtag.js) - Google Analytics