ByxContainerAnnotation是一个模仿Spring IOC基于注解的轻量级IOC容器,支持构造函数注入和字段注入,支持循环依赖处理和检测,具有高可扩展的插件系统。
项目地址:
通过一个简单的例子来快速了解ByxContainerAnnotation的使用。
A.java:
B.java:
main函数:
执行main函数后,控制台输出结果:
如无特殊说明,以下示例中的类均定义在包下。
该类是接口的实现类,是容器工厂,用于从指定的地方创建IOC容器。
通过包扫描的方式创建IOC容器,用法如下:
在构造时,需要传入一个包名或者某个类的对象。调用方法时,该包及其子包下所有标注了的类都会被扫描,扫描完成后返回一个实例。
该接口是IOC容器的根接口,可以用该接口接收的方法的返回值,内含方法如下:
方法描述向IOC容器注册对象,如果id已存在,则抛出获取容器中指定id的对象,如果id不存在则抛出获取容器中指定类型的对象,如果类型不存在则抛出,如果存在多于一个指定类型的对象则抛出获取容器中所有对象的id集合
用法如下:
注解可以加在类上,用于向IOC容器注册对象。在包扫描的过程中,只有标注了注解的类才会被扫描。
例子:
注解还可以加在方法上,用于向IOC容器注册一个实例方法创建的对象,注册的id为方法名。
例子:
注意,如果某个方法被标注了,则该方法所属的类也必须标注,否则该方法不会被包扫描器扫描。
注解可以加在类上,与配合使用,用于指定注册对象时所用的id。
例子:
注意,如果类上没有标注,则该类注册时的id为该类的全限定类名。
注解也可以加在方法上,用于指定实例方法创建的对象的id。
例子:
注解还可以加在方法参数和字段上,请看构造函数注入、方法参数注入和@Autowire自动装配。
如果某类只有一个构造函数(无参或有参),则IOC容器在实例化该类的时候会调用该构造函数,并自动从容器中注入构造函数的参数。
例子:
在构造函数的参数上可以使用注解来指定注入的对象id。如果没有标注注解,则默认是按照类型注入。
例子:
对于有多个构造函数的类,需要使用注解标记实例化所用的构造函数。
例子:
注意,不允许同时在多个构造函数上标注注解。
注解标注在对象中的字段上,用于直接注入对象的字段。
例子:
默认情况下,按照类型注入。也可以配合一起使用,实现按照id注入。
例子:
还可标注在构造函数上,请看构造函数注入。
如果标注了的实例方法带有参数列表,则这些参数也会从容器自动注入,注入规则与构造函数的参数注入相同。
例子:
注解用于指定对象的初始化方法,该方法在对象属性填充后、创建代理对象前创建。
例子:
输出如下:
注解用于向容器中注册常量值。该注解标注在某个被标注的类上,可重复标注。
用户可通过实现一个来注册自定义类型:
ByxContainerAnnotation支持各种循环依赖的处理和检测,以下是一些例子。
一个对象的循环依赖:
两个对象的循环依赖:
构造函数注入与字段注入混合的循环依赖:
三个对象的循环依赖:
无法解决的循环依赖:
ByxContainer提供了一个灵活的插件系统,你可以通过引入一些名称为的依赖来扩展ByxContainer的功能。当然,你也可以编写自己的扩展。
扩展说明byx-container-extension-aop提供面向切面编程(AOP)的支持,包括前置增强()、后置增强()、环绕增强()、异常增强()四种增强类型byx-container-extension-transaction提供声明式事务的支持,包括对和注解的支持
如果您觉得本文的内容对您的学习有所帮助:
关键字:
jquery