HK2学习之代码实现

依赖

        <dependency>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>hk2</artifactId>
            <version>3.0.3</version>
        </dependency>
        
        <!--用于注册配置-->
        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
            <version>0.10.2</version>
        </dependency>

服务

接口

package codeTemplate.hk2.service;

import org.jvnet.hk2.annotations.Contract;

@Contract
public interface MyService {
    void hello();
}

实现

实现一

package codeTemplate.hk2.service;

import org.jvnet.hk2.annotations.Service;

@Service
public class ResService implements MyService{
    public String getAResService() {
        return "A";
    }

    public String getBResService() {
        return "B";
    }

    @Override
    public void hello() {
        System.out.println("ResService");
    }
}

实现二

package codeTemplate.hk2.service;

import com.google.common.collect.ImmutableMap;
import jakarta.inject.Inject;
import org.jvnet.hk2.annotations.Service;

import java.util.Map;

@Service
public class HttpService implements MyService{
    @Inject
    private ResService resService;

    public Map<String, String> getAllHttpService() {
        System.out.println(resService.getAResService());
        return ImmutableMap.of("A", resService.getAResService(), "B", resService.getBResService());
    }

    @Override
    public void hello() {
        System.out.println("HttpService");
    }
}

启动类

package codeTemplate.hk2;

import codeTemplate.hk2.service.HttpService;
import jakarta.inject.Singleton;
import org.glassfish.hk2.api.*;
import org.glassfish.hk2.utilities.BuilderHelper;
import org.reflections.Reflections;

import java.util.Set;

public class Hk2Demo{
    public static void main(String[] args) {
        //创建一个服务加载器
        ServiceLocator serviceLocator = ServiceLocatorFactory.getInstance().create("template-hk2");
        //初始化配置
        initConfig(serviceLocator);
        //执行业务
        HttpService httpService = serviceLocator.getService(HttpService.class);
        System.out.println(httpService.getAllHttpService());
    }

    private static void initConfig(ServiceLocator serviceLocator) {
        Reflections reflections = new Reflections("codeTemplate.hk2");
        Set<Class<?>> serviceClasses = reflections.getTypesAnnotatedWith(org.jvnet.hk2.annotations.Service.class);
        System.out.println(serviceClasses);
        Set<Class<?>> contractClasses = reflections.getTypesAnnotatedWith(org.jvnet.hk2.annotations.Contract.class);
        System.out.println(contractClasses);
        DynamicConfigurationService dcs = serviceLocator.getService(DynamicConfigurationService.class);
        DynamicConfiguration config = dcs.createDynamicConfiguration();
        for(Class<?> serviceClass:serviceClasses){
            Class<?> linkTo = serviceClass;
            for (Class<?> contractClass : contractClasses) {
                if(contractClass.isAssignableFrom(serviceClass) && contractClass.isInterface() ){
                    linkTo = contractClass;
                    break;
                }
            }
            config.bind( BuilderHelper.link(serviceClass).to(linkTo).in(Singleton.class).build() );
        }
        config.commit();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值