@Repository注解会导致spring boot生成一个动态代理

用了一个@Repository注解,本意是避免了idea开发工具提示接口 unused,但是导致了一个后果,spring boot自动把该接口包装成了动态代理类,里面才是mybatis生成的动态代理类。
项目框架内用到了hdl = Proxy.getInvocationHandler(this.baseMapper); 来获取真实的DAO层接口,导致了获取不到,取到的是Jdk的动态代理类

下面是basemapper的代理实现类。
com.baomidou.mybatisplus.core.override.PageMapperProxy@73d0f,
它的InvocationHandler是JdkDynamicAopProxy类,但是调用getinvocationHandler方法会返回null,因为取不到System.getSecurityManager()
![](https://s1.51cto.com/images/blog/201904/04/b164e60c24a1c7ace65601ba8e25ae5e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

图片中红框处返回值为null,原因未知。

转载于:https://blog.51cto.com/luhaiyou/2374322

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @Mapper注解用于标记一个接口,它表示这个接口将作为MyBatis的映射文件来使用,它对应一个XML文件,其中定义了将被映射到该接口的SQL语句。@Repository注解是用来标识DAO层的组件,它将被用于自动生成DAO实现类,以及实现持久化操作。 ### 回答2: 在Spring Boot中,@Mapper和@Repository是两个常见的注解,用于在框架中进行数据访问和持久化操作。 @Mapper是MyBatis框架中的注解,用于标识一个接口是MyBatis的映射器。通过@Mapper注解,我们可以告诉Spring Boot将这个接口注册为一个可以执行SQL语句的Mapper接口。在使用@Mapper注解时,我们无需编写接口的具体实现,MyBatis根据接口的定义自动生成对应的实现类。这样,我们就可以通过调用Mapper接口的方法来执行数据库的增删改查等操作。 @RepositorySpring框架中的注解,用于标识一个类是持久化层(Repository层)的组件。在Spring Boot中,我们通常使用@Repository注解将DAO(数据访问对象)标识为持久化组件。使用@Repository注解后,Spring Boot自动扫描并将其纳入IoC容器中,使得我们可以在其他组件中直接使用@Autowired注解来注入并使用该持久化对象。 总结起来,@Mapper注解用于MyBatis的接口类,告诉Spring Boot将接口注册为Mapper并生成对应的实现类,使得我们可以使用Mapper接口执行数据库操作。而@Repository注解用于Spring的持久化层组件类,标识该类为数据访问对象,可以在其他组件中直接进行注入和使用。这两个注解Spring Boot中起到了不同的作用,但都是用于简化数据库访问和持久化操作的配置和编码工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值