Spring整合rabbitmq实践(一):基础

Spring整合rabbitmq实践(一):基础,第1张

我们可以看到, 如果使用R2dbc 已经实现的分页, 那么我们可以使用Pageable 进行分页查询, 但是如果我们需要使用offset 此时, 现有的支持也许并不够用, 那么我们需要自己来实现 Pageable 接口来实现offset分页

由于项目需要, 决策层决定只给API调用者提供获取下一页的功能, 而不是提供给API 调用者提供直接查询某一页的功能, 我个人理解是, 这样做可以直接让API调用方调用指定的需要的查询记录的位置而不是必须要页首

这里我们就已经实现了所有需要的方法, 那么我们可以使用我们的实现来使用 Offset 类来进行分页查询, 这里笔者觉得如果Spring Pageable 提供泛型会更加灵活, 这样的话我们直接可以指定返回类型, 不过也有可能Spring 本身有其他考量在此

但是这里还是有缺陷的, 如果外部调用构造函数, 例如 new Offset(5, 10, false), 那么势必,我们使用 pageableisPaged() 会得到false, 那么我们接下来很可能会碰到一些问题, 但很显然我们需要使用new Offset(5, 10, true) 那么这里最后将构造函数私有, 然后提供,比如一个of的静态方法来让外部使用:

其实这里我们依然有一些问题存在, 例如, 如果控制层调用时, 提供的参数为空的情况, 我们就比较被动了, 以为我们使用的是int 型, 不允许为null, 所以有一种情况, 假设用户请求为: GET "/dosomtinglimit=10", 此时, 我们获得的offset是空, 那么我们可能想设定offset = 0, 那么如果使用int 就办不到了, 所以我们需要 offset 为 Integer, 或者给offset 一个默认值等

由于时间有限, 笔者没有进行过多的测试, 可能实现类中还有隐含问题待解决, 不过自己实现接口往往会遇到各种问题, 这也是很难避免的, 一般建议, 如果依赖包本身含有现成的实现类, 那么我们最好不要重复造轮子, 但是如果必须自己实现, 那良好的测试是必要的

FactoryBean并不是简单的@Bean 

一般情况下,Spring通过反射机制利用的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在中提供大量的配置信息。配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个orgspringframeworkbeanfactoryFactoryBean的工厂类接口,用户可以通过实现该接口定制实例化Bean的逻辑。FactoryBean接口对于Spring框架来说占用重要的地位,Spring自身就提供了70多个FactoryBean的实现。它们隐藏了实例化一些复杂Bean的细节,给上层应用带来了便利。从Spring30开始,FactoryBean开始支持泛型,即接口声明改为FactoryBean<T>的形式

FactoryBean底层Java8实现两个方法:

@Override public Object getObject() throwsException {

     loggerdebug("getObject");

     returnproxyObj; }

 @Override public ClassgetObjectType() {

         return proxyObj == null Objectclass : proxyObjgetClass();

    }

FactoryBean是个接口,可以实例化两个对象,当在IOC容器中的Bean实现了FactoryBean后,通过getBean(String BeanName)获取到的Bean对象并不是FactoryBean的实现类对象,而是这个实现类中的getObject()方法返回的对象。要想获取FactoryBean的实现类,就要getBean(&BeanName),在BeanName之前加上&。

最近在写一个很多数据表 *** 作的项目,使用Spring+mybatis开发,写了很多的Service及其实现,这些service都有同样的风格,就是一些增删改查的功能。于是就想着写一个泛型接口GenericService和抽象类GenericServiceImpl,ServiceImpl直接继承泛型接口的实现类GenericServiceImpl,在GenericServiceImpl中通过虚函数获取DaoHelper和NAMESPACE,尽可能的保持扩展性。

但是这样的出了一个问题,子类在注册成service的时候,重新实现的方法上的@transactional注解无效,也就是事务控制不起作用了,测试了一下其他不用这种方式实现的ServiceImpl类的事务是OK的,那么问题就出现在继承上面,于是尝试在GenericServiceImpl类上面加上事务注解,测试发现又有了事务控制。

这样又带来一个问题,那就是所有的方法都有了事务,这会导致性能的损失,于是在GenericServiceImpl的每个方法上加上@Transactional(propagation = PropagationSUPPORTS)根据Spring的描述在这种注解的情况下仍然会使用同步器,对性能的影响有待测试。

以上就是关于Spring整合rabbitmq实践(一):基础全部的内容,包括:Spring整合rabbitmq实践(一):基础、聊聊Spring Boot面试相关问题、Spring Webflux + r2dbc 分页查询 示例2等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10093167.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存