SpringDataJpa功能扩展结构分析

SpringDataJpa功能扩展

Spring Data Jpa功能虽然已经非常强大,但是它依然存在很多满足不了的需要,在很多时候,我们需要自己去对SpringDataJpa的功能进行相应的扩展(即:自定义Repository)

首先以常规使用SpringDateJpa为例

在这里插入图片描述
xml配置

    <!--SpringDateJpa配置-->
    <jpa:repositories
            base-package="wltyx.nyybw.aisell.repository"
            transaction-manager-ref="transactionManager"
            entity-manager-factory-ref="entityManagerFactory"
    />

可以看出常规的使用方式其实是使用了接口的方式,自定义的EmployeeRepository接口继承了JpaSpecificationExecutor接口JpaRepository接口就可以实现SpringDateJpa的功能了,但是对于开发者而言仅仅只是写了一个接口,而接口是不可能去完成所需要的功能的,所以在底层一定会有类的创建去实现我们自定义的接口去帮我们实现功能。

    @Autowired
    private EmployeeRepository dao;

    @Test
    public void testName(){
        System.out.println(dao);
        System.out.println(dao.getClass());
    }

运行的结果为:

org.springframework.data.jpa.repository.support.SimpleJpaRepository@5c92166b
class com.sun.proxy.$Proxy27

所以所它是使用的代理模式来完成我们所需要的功能

那么我们再看看打印出来的SimpleJpaRepository这个类

在这里插入图片描述
可以看出SimpleJpaRepository这个类同样继承了JpaSpecificationExecutor接口JpaRepository接口

所以说只要我们从这个类入手就可以实现我们自己功能扩展了。

在网上找了很久才知道在SpringDateJpa的xml配置文件约束中有一个factory-class的属性可以指定使用我们自己的工厂去创建代理模式所需要的类

我通过自定义了一个BaseRepositoryImpl类实现了我的Repository公共父接口并继承了SimpleJpaRepository类
在这里插入图片描述
之后再创建了一个BaseRepositoryFactoryBean工厂继承JpaRepositoryFactoryBean类
在这里插入图片描述通过自定义的工厂类指向我自定义的BaseRepositoryImpl类

这样便完成了我自定义的对SpringDataJpa功能的扩展,此后只需要在公共父接口BaseRepository中写上所需要的抽象方法,使用BaseRepositoryImpl类去实现方法,便可以在以后所有继承公共父接口BaseRepository的接口中实现所扩展的方法,当然也可以直接写在BaseRepositoryImpl类中,但是并不建议使用这种方式

附上源码:SpringDataJpa功能扩展源码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值