文档章节

轻量级IOC/DI 容量HK2初探(零配置)

hanhanxuexi
 hanhanxuexi
发布于 2015/01/31 13:05
字数 808
阅读 435
收藏 1

     背景知识: 

     SUN公司提出了一个类似于OSGi的模块化系统规范称之为“HK2”。HK2的全称为“Hundred Kilobytes Kernel”,包括Modules Subsytem和Component Model两部分。据称,该内核将在JDK 7中集成,同时,SUN在其开源的GlassFish J2EE应用服务器项目V3版本中将HK2作为其系统内核实现。

协议: https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html


  我今天向大家介绍一个比较spring更加轻量级的IOC/DI容器框架, 只要有一个maven依赖即可,如下所示:

<dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>hk2</artifactId>
    <version>2.3.0</version>
</dependency>

  这样就可以在使用该框架了。

     因为"HK2"框架在国内资料比较紧缺,所以我来做这么个专题来介绍它,希望大家读完这篇文章能够知道它的原理,以及能够马上使用起来,给自已的系统减减肥,大家都知道,spring框架是多么多么的强大啊,但是它的强大之处呢,却更加觉得它的重量了。所以我们可以去掉它的重量,去拥抱"HK2",当然,"HK2"也做了spring,guice等适配。方便开发者可以很快切换过去的。

下面请允许我来介绍它,来自sun 公司 模化化系统将会给我们带来别样的惊喜呢。

为了它demo更加简单,我开始写一个helloworld吧

@Contract
public interface MyService {

  public void helloHK2();

}

 大家会觉得接口也要使用注解,这很奇怪哦。没关系,后面的专题会给你一一道来。

它的实现类,如下所示:

@Service @Singleton
public class MyServiceImpl implements MyService {
  @Override
  public void helloHK2() {
    Log4jUtil.info("hello hk2");
  }
}

 两个注解,好像很酷的赶脚。那接下来要如何去使用它呢。

下面是我写单元测试:

public class TestContext {

  private ServiceLocator locator;

  @Before
  public void doBefore() {
     locator = ServiceLocatorFactory.getInstance().create("CustomResolverTest");
     Populator.populate(locator);
  }

  @Test
  public void testDI(){

    MyService myService = locator.getService(MyService.class);
    myService.helloHK2();

  }

   Populator的类,如下所示:

public class Populator {
    public static void populate(ServiceLocator locator) {
        DynamicConfigurationService dcs = locator.getService(DynamicConfigurationService.class);
        DynamicConfiguration config = dcs.createDynamicConfiguration();
        
        // The InjectionResolver we are showcasing
        config.bind(BuilderHelper.link(MyServiceImpl.class).
                to(MyService.class).
                in(Singleton.class.getName()).
                build());
        // And commit
        config.commit();           
    }

}

  下面,可能有童鞋要问, 写一个接口,以及实现类,都要通过

config.bind(BuilderHelper.link(MyServiceImpl.class).
                to(MyService.class).
                in(Singleton.class.getName()).
                build());

 绑定,会不会比较麻烦呢,是的,在实际的运用中,肯定是不能这么使用的。我们可以自定义一个扫包程序,去扫描它。

代码如下:

public class TestContext {

  private ServiceLocator locator;

  @Before
  public void doBefore() {
    try {
      locator = HK2RuntimeInitializer.init("SceneDev-HK-Locator", false, "com.gzisming.hk2.service.impl");

      //full search
      //ServiceLocator foo = HK2RuntimeInitializer.init("OtherName", false);
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

  @Test
  public void testDI(){

    MyService myService = locator.getService(MyService.class);
    myService.helloHK2();

  }

其中HK2RuntimeInitializer是一个自定义类。详细可以查看我的代码附件。

(完), 有机会一起交流“HK2", 这篇文章算一个入门级文章,让大家先用起来。然后再深入学习。

相关学习链接 :

https://hk2.java.net/2.4.0-b09/ (官网)

http://my.oschina.net/pkm2012/blog/96613



© 著作权归作者所有

hanhanxuexi
粉丝 2
博文 3
码字总数 1752
作品 0
广州
私信 提问
IoC/DI 容器 - HK2

jersey2 glassfish内集成的IoC,DI 容器 SUN公司提出了一个类似于OSGi的模块化系统规范称之为“HK2”。HK2的全称为“Hundred Kilobytes Kernel”,包括Modules Subsytem和Component Model两部...

匿名
2013/08/12
1K
0
Develop app whit HK2

声明:除了人人IT網 外其他个人或企业都可转载 写一个HK2组件 HK2是轻量级、可扩展的Glassfish Server 内核。为了和GlassFish 服务器(glassfish中其他服务和组件)交互,就需要编写基于HK2...

WhiteLeibniz
2012/12/17
1K
1
spring学习3-Ioc和DI的简单介绍

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转还有一个名字叫做依赖注入(Depende...

大嘴吃鸡腿
2014/03/16
176
0
轻量级的Java应用编程框架--ZolltyMVC

ZolltyMVC框架是一款轻量级的Java应用编程框架,融合了常用的IOC/DI、MVC(注解、XML配置、RESTful API、模型驱动、视图模板等)功能。目的就是帮助大家开发高效、灵活、高质量的应用,并减轻...

Zollty
2015/09/16
835
0
spring 入门及IOC容器

Spring 一.Spring,原意“春天”,是一种轻量级容器框架,所谓轻量级就是依赖比较少,侵入性较低,其核心就是1. IOC(Inversion of Control)/DI(Dependency Injection)IoC的核心思想是通过消...

天国使者125
2013/06/15
182
0

没有更多内容

加载失败,请刷新页面

加载更多

面向海量数据的极致成本优化-云HBase的一体化冷热分离

前言 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多...

阿里云官方博客
27分钟前
3
0
最新最全国内外架构开源技术干货资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。 领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。 大家按照下...

泥瓦匠BYSocket
29分钟前
6
0
springmvc jsp访问不了css

在jsp中引入css,一直报404错误,直接访问css,也无法访问 将css文件移出WEB-INF,因为处于安全性考虑,这个目录禁止外部访问。 当引用css时,可以直接用绝对路径${pageContext.request.conte...

沉迷于编程的小菜菜
32分钟前
4
0
android 系统版本 9.1网络请求遇到坑

网络请求异常: E/http: CLEARTEXT communication to plat.xunlinkeji.cn not permitted by network security policy 在res下新建一个xml目录 创建名为network_security_config.xml 文件 ,该......

MrLins
49分钟前
5
0
Istio 1.3 发布,HTTP 遥测不再需要 Mixer

> 原文链接:Istio 1.3 发布,HTTP 遥测不再需要 Mixer Istio 是 Google、IBM 和 Lyft 联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题...

米开朗基杨
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部