热门关键字:
jquery > jquery教程 > jquery教程 > ByxContainerAnnotation——基于注解的轻量级IOC容器

ByxContainerAnnotation——基于注解的轻量级IOC容器

412
作者:管理员
发布时间:2021/5/14 17:30:10
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=4713
  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
友荐云推荐