• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

knapsack: 轻量级依赖注入框架, 已经实现IOC依赖注入功能和CGLIB、JDK实现的AOP功能 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

knapsack

开源软件地址:

https://gitee.com/mackyHuang/knapsack

开源软件介绍:

knapsack Maven Central License

-- 第一个版本已经发布 --

介绍

knapsack 小背包

顾名思义,一个轻量级依赖注入框架,已经实现IOC依赖注入功能和CGLIB、JDK实现的AOP功能,还可以通过配置properties文件配置需要的属性

  • 依赖注入
    • 实现JSR330 (Dependency Injection for Java)中的依赖注入规范
    • 对于接口和实现类的管理,提供了QualifierSack.bindQualifierClassToPool方法
  • aop
    • 实现CGLIB和JDK的双重动态代理,轻便的进行切面编程
    • 提供 preInvokepostInvokepostReturningpostThrowing四个方法丰富你的业务逻辑,并且preInvoke提供可控的中断接口,是否继续后续执行由你决定
  • 基于配置文件的功能
    • 接口和实现类的绑定可通过配置文件实现

安装教程

maven项目的话直接在pom.xml中引入

<dependency>    <groupId>vip.ifmm</groupId>    <artifactId>knapsack</artifactId>    <version>1.0.0</version></dependency>

当然啦,gradle的话就是这样

compile group: 'vip.ifmm', name: 'knapsack', version: '1.0.0'

使用说明

  • 引入Knapsack依赖后
  • 首先声明容器, 如果依赖注入中需要使用到从实现类到接口的注入,类似于
    @Named("stu")    @Inject    public Person stu;

这样的依赖注入(向Person注入实现类Stu),就需要实现告知容器对应关系,然后就可以使用

public <T> T takeOutInstance(Class<T> clazz)

获取容器管理的实例,参数为需要获得实例的类

先列出其他辅助类,帮助理解
      public abstract class Person      ——————      //声明单例Stu      @Singleton      @Named()      public class Stu extends Person      ——————      //声明单例Teacher      @Singleton      @Named()      public class Teacher extends Person      ——————      public class ClassRoom{          @Named("stu")          @Inject          public Person stu;                @Named("teacher")          @Inject          public Person teacher;      }

@Singleton觉得实例在容器中是否为单例

@Named("id") 觉得在构建时或者注入时的id,构建时若id为空,默认使用类名小写注入时,则需要@Named与@Inject同时存在,且id必填

  • 这里提供2种方式:
    • 代码形式:
        Knapsack knapsack = new Knapsack();    //绑定接口与实现类    knapsack.link(Person.class).with(Stu.class);    knapsack.link(Person.class).with(Teacher.class);    ClassRoom classRoom = knapsack.sew()                                  .takeOutInstance(ClassRoom.class); 
    • 配置文件形式:更加简洁的代码,sew的参数是配置文件的位置
        Knapsack knapsack = new Knapsack();    ClassRoom classRoom = knapsack.sew("test.properties")                                  .takeOutInstance(ClassRoom.class);
    配置文件的内容
    #指定包扫描位置scanPackage=vip.ifmm.knapsack#指定接口与实现类的关系,若有多个实现类,使用$分隔qualifier.Person=Stu$Teacher
  • 在上述例子中,使用到takeOutInstance的位置,就是获取实例的位置,那么,如果你把它改为
    ClassRoom classRoom = (ClassRoom) knapsack.enhanceInstance(ClassRoom.class, SimpleAdapter.class, Recordlog.class);    参数为        ① 需要进行增强的类        ② 实现 `EnhancementAdapter` 接口的类(业务实现处)        ③ 增强标志注解(类中被标记此注解的方法才会被增强)        这时就会返回一个已经被增强会的代理对象,直接使用即可

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap