记录一次未知错误:mybatis-plus的ServiceImpl实现类在某些条件下出现循环引用问题

13 篇文章 0 订阅
5 篇文章 0 订阅

触发条件:1.在BaseService(ServiceImpl实现类)同级目录下中添加子包并添加一些实现类

2.添加shiro注解支持的配置

此时BaseService同级目录下的类,被识别为算是被Spring认为是包装过的类关于Springboot+MybatisPlus架构循环依赖问题研究 - 法号钦尘的个人空间 - OSCHINA - 中文开源技术交流社区如出现循环引用会报错:

 but has eventually been wrapped.

Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sysUserService': Bean with name 'sysUserService' has been injected into other beans [sysUserService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesForType' with the 'allowEagerInit' flag turned off, for example.
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:623) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.2.14.RELEASE.jar:5.2.14.RELEASE]

解决此问题目前知道的是在加@Autowired注解同时加 @Lazy注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis-Plus ServiceImpl是一个基于Mybatis-PlusService实现,它提供了一些常用的CRUD操作方法,可以帮助我们快速开发和维护数据库操作。它是一个非常实用的工具,可以大大提高我们的开发效率和代码质量。 ### 回答2: Mybatis-PlusMybatis的增强工具库,其中封装了许多便于开发的功能,如基本CRUD、分页查询、条件构造器、代码生成器等。mybatis-plus serviceimpl是使用Mybatis-Plus开发的服务层实现的命名规范。 mybatis-plus serviceimpl一般包含以下几个部分: 1. 注解部分: @Service:标注该是服务层实现,由Spring容器管理 public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; ... } 2. 接口部分: public interface UserService extends IService<User> { User getUserById(Long id); boolean saveUser(User user); boolean deleteUser(Long id); boolean updateUser(User user); List<User> listUsers(); } 3. 实现部分: @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public User getUserById(Long id) { return getById(id); } @Override public boolean saveUser(User user) { return save(user); } @Override public boolean deleteUser(Long id) { return removeById(id); } @Override public boolean updateUser(User user) { return updateById(user); } @Override public List<User> listUsers() { return list(); } } 从以上代码中可以看出,mybatis-plus serviceimpl使用了ServiceImpl作为基础实现,该中已经实现Mybatis-Plus中接口的方法,因此在实现中只需要重写自定义逻辑的方法即可。 在实现中要注意@Service和@Autowired注解的使用,以及ServiceImpl的泛型参数设置和具体操作方法的调用。使用Mybatis-Plusserviceimpl可以在快速构建服务层实现的同时提高开发效率和维护性。 ### 回答3: MyBatis-Plus是一个基于MyBatis的增强工具,它提供了许多实用的功能,可以使得我们在使用MyBatis时更加便捷。其中,serviceimplMyBatis-Plus框架中的一种常用实现serviceimplservice接口的具体实现,它实现service接口中定义的方法,并调用Mapper层提供的CRUD操作实现具体的业务需求。在MyBatis-Plus框架中,我们可以使用动态代理的方式生成serviceimpl,这也是该框架的一个优势。 使用MyBatis-Plusserviceimpl,我们可以通过继承BaseServiceImpl方法来快速构建出数据库表对应的Service层代码,同时,我们还可以使用MyBatis-Plus提供的各种查询功能,例如lambda表达式、条件构造器等,来优化查询效率和编写效率。 此外,在编写serviceimpl时,还需要注意事务的管理,我们可以使用@Transactional注解来声明事务,并在方法内实现需要执行的业务逻辑,在方法执行完成后,事务会自动提交或者回滚,以保证数据的一致性和完整性。 总之,MyBatis-Plusserviceimpl是一个非常便捷和高效的工具,可以帮助我们快速构建出适用于不同业务场景的Service层代码,并优化查询效率和编写效率,提高数据库操作的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值