代码拉取完成,页面将自动刷新
-- 第一个版本已经发布 --
knapsack 小背包,
顾名思义,一个轻量级依赖注入框架, 已经实现IOC依赖注入功能和CGLIB、JDK实现的AOP功能,还可以通过配置properties文件配置需要的属性
QualifierSack.bindQualifierClassToPool
方法preInvoke
、postInvoke
、postReturning
、postThrowing
四个方法丰富你的业务逻辑,并且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'
@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必填
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);
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` 接口的类(业务实现处)
③ 增强标志注解(类中被标记此注解的方法才会被增强)
这时就会返回一个已经被增强会的代理对象,直接使用即可
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型