kunJ

kunJ框架,是基于HK2框架的一个自实现注入框架,功能比较简单,重在探索依赖注入的实现原理。

实现细节

  1. 自定义3个注解,Access,Inject,Service
  2. 在Service中实现对Inject对象的注入(Inject对象必须是Service且有默认构造器)
  3. 在Service中自动调用标注了Access的方法
  4. 注入实现类ClassAnalyzer中reInject,实现动态自定义注入(覆盖自动注入)

整体架构

示例

//Sevice
@Service
public class ClassOfArt implements Class{ @Override
public void hi() {
System.out.println("this is class of art.");
}
}
//Sevice
@Service
public class College {
@Inject
private Department art; @Access
public void run() {
System.out.println("this is college of art.");
art.hi();
}
}
//Sevice
@Service
public class DepartmentOfArt implements Department{ @Inject
private Class artClass; @Override
public void hi() {
System.out.println("this is department of Art.");
artClass.hi();
}
} //College需要注入Department,Department需要注入Class
//注入
try {
ClassAnalyzer.inject();
} catch (Exception e) {
e.printStackTrace();
}

结果:

//自定义注入
Class art = new Class() {
@Override
public void hi() {
System.out.println("hello world");
}
};
try {
ClassAnalyzer.reInject(Class.class, art);
} catch (Exception e) {
e.printStackTrace();
}

运行结果:

github地址

github.com/lknny/kunj

HK2框架的简单自实现kunJ的更多相关文章

  1. 基于ThinkPHP框架的简单的后台管理系统

    版权声明:本文为博主原创文章,未经博主允许不得转载. 基于ThinkPHP框架的简单的后台管理系统 一个简单的后台管理系统,可能还不全面,可以自己改,有登录功能 实例如图:    

  2. PHP ORM框架与简单代码实现(转)

    对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...

  3. 初识服务发现及Consul框架的简单使用

    初识服务发现及Consul框架的简单使用   1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...

  4. truffle框架的简单使用

    truffle 给大家介绍一下这个框架怎么使用,其实把这个框架就是你们看我之前有一个教程是教你们怎么用remix-ide来连接私有链,编译,配置合约,然后进行调用的,truffle其实就是把这个步骤放 ...

  5. python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用

    python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...

  6. 框架Thinkphp5 简单的实现行为 钩子 Hook

    这篇文章主要介绍了关于框架Thinkphp5 简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 实现在一个方法开始和结束加入两个行为:api_init.ap ...

  7. Net系列框架-Dapper+简单三层架构

    Net系列框架-Dapper+简单三层架构 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题,欢迎联系我 ...

  8. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

  9. Eclipse IDE下的Spring框架使用简单实例

    Eclipse IDE下的Spring框架使用简单实例 1 准备Java jdk安装. Eclipse软件安装.根据系统安装32/64版本,选择Eclipse IDE for Java Develop ...

随机推荐

  1. redis持久化的几种方式

    1.前言 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集 ...

  2. 33. leetcode 268. Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  3. 设计模式(二) 策略模式Strategy

    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,我个人的理解是,具有相同行为不同的行为模式,比如走路,有人速度3m/s,有人100m/s,把他们的具体行走和对象本身 ...

  4. nodejs-基础

    01-nodejs介绍 1.什么是nodejs 1.(javascript跑在机器端,服务端)Javascript on the machine 2.(跑在谷歌v8引擎上)A runtime for ...

  5. 【学习OpenCV】——2.4对图像进行平滑处理

    作者基于WIN10+VS2015+OpenCV3.0.0 (本人在学习的时候参考了xiahouzuoxin 的有关文章,在此感谢 ) 图像平滑与图像模糊是同一概念,主要用于图像的去噪.平滑要使用滤波器 ...

  6. 用ubuntu的grpb2引导Remix OS

    Remix OS游戏版,这里下载:http://youxi.jide.com/ 安装简单.我这里要解决的是安装后用ubunu的grub2菜单去引导它. 方法如下: 进入ubuntu系统里修改其grub ...

  7. 【有意思的BUG】浏览器的Title和Icon

    序:Icon在术语上也称为"ico",比如豆瓣的ICON地址:http://img3.douban.com/favicon.ico 先贴一张图,有助于理解这篇文档的标题--< ...

  8. leetcode Binary Tree Right Side

    Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...

  9. iOS - Block底层解析

    Block是iOS开发中一种比较特殊的数据结构,它可以保存一段代码,在合适的地方再调用,具有语法简介.回调方便.编程思路清晰.执行效率高等优点,受到众多猿猿的喜爱.但是Block在使用过程中,如果对B ...

  10. # Consumed parameters

    consumed这个单词我并不能给出很准确的翻译,在这篇文章中,我把Consumed parameters称为耗用参数,它在OC中有着独特的应用场景. 在https://clang.llvm.org/ ...