体验【开源中国】全新APP,一站式掌握开源技术动态,即刻下载,开启您的开源技术探索之旅!
本次更新:
- 新增:loveqq-boot-starter-feign,支持 loveqq-mvc 内置注解,控制器转 api 更方便
- 优化:loveqq-boot-starter-feign,支持 feign 接口级配置、ribbon 服务级配置
- 修复:loveqq-boot,@Configuration 配置类的父类的 @Bean 方法基于字节码增强的自调用失效
- 新增:loveqq-boot,新增 I18nResourceBundle 实现国际化支持
- 修复:loveqq-boot-starter-dubbo,dubbo 注解失效
- 优化:loveqq-mvc,新增内置 cors 过滤器支持,支持配置文件配置过滤器
- 优化:loveqq-core,调整反射缓存方法,提升反射调用性能
- 优化:REAMME.md,新增 gradle 打包示例
- 新增:loveqq-boot,新增 By+OverrideBy,实现方法级委托调用,可解耦类之间的实例依赖关系
By+OverrideBy 示例
public static class Parent { private Integer incr(int i) { return ++i; } } @Component @OverrideBy public static class CustomizeParent extends Parent implements By, CommandLineRunner { @Override public void run(String... args) throws Exception { Integer incr = incr(1); System.out.println(incr); // 打印 1 + 1 = 2 } /** * 默认委托给父类 */ @OverrideBy public Integer incr(int i) { System.out.println("customize incr"); return (Integer) invoke(); // 默认使用当前实例以及当前的方法参数,调用父类的 incr(int) 方法 } } @Component @OverrideBy public static class DelegateParent implements By, CommandLineRunner { @Autowired private Parent parent; @Override public void run(String... args) throws Exception { Integer incr = this.incr(2); System.out.println(incr); // 打印 2 + 1 = 3 } /** * 不可继承的,可通过注解指定委托 */ @OverrideBy(by = Parent.class) public Integer incr(int i) { System.out.println("delegate incr"); Integer o1 = (Integer) invoke(); // 默认从容器中获取 Parent 实例,并使用当前的方法参数,调用委托的 incr(int) 方法 Integer o2 = (Integer) invoke(i); // 默认从容器中获取 Parent 实例,并使用特定参数,调用委托的 incr(int) 方法 return (Integer) invoke(this.parent, new Object[]{i}); // 指定使用特定实例以及特定参数,调用委托的 incr(int) 方法 } }
和 spring 的联系
初期是以学习 spring 进行开发的,但是却并没有参考 spring 的实现,仅仅是把 spring 当做一个黑盒接口,根据 spring 的外在功能表现,使用自己的想法去实现功能,所以该框架,即不是模仿 spring,也不是 spring 的二开。而是一个全新的,但又高度符合 spring 开发者使用习惯的完整的 ioc/aop 框架。内部实现大不同,感兴趣的可以了解下。
框架使用示例可查看:loveqq-framework-example
完整的项目体验可查看:RuoYi-for-loveqq
还没有评论,来说两句吧...