Spring数据:获取Spring bean的Target Class对象和自定义接口类型

时间:2019-06-19 23:31:22

标签: spring spring-data spring-aop

我有一个与以下应用配合使用的应用

  • Spring Framework
  • Spring Data JPA

对于测试,通过JUnit 5,我具有以下内容:

@Autowired
private GodRepository godRepository;

....

@Test
void classTest() {
    logger.info("Target (AOP) Class: {}", AopUtils.getTargetClass(godRepository));
    logger.info("Target expepcted Type Class: {}", GodRepositoryDataJpaAdapter.class);
    assertThat(AopUtils.getTargetClass(godRepository)).isNotNull()
                                                      .isEqualTo(GodRepositoryDataJpaAdapter.class);
}

它有效并通过。 GodRepositoryDataJpaAdapter在这里实现了GodRepository

目的:确认@Autowired在运行时通过GodRepositoryDataJpaAdapter类型注入了GodRepository类类型

直到此处一切正常,并且明确适用于Spring Framework

现在介绍Spring Data

存在者定义了以下自定义interface

public interface GodRepositoryDataJpa extends CrudRepository<God, String> {

}
再次出于测试目的

@Autowired
private CrudRepository<God, String> godCrudRepository;

...

@Test
void classTest() {
    logger.info("Target (AOP) Class: {}", AopUtils.getTargetClass(godCrudRepository));
    logger.info("Target (AOP) Class: {}", AopUtils.getTargetClass(godCrudRepository).getSuperclass());
    logger.info("Target expepcted Type Class: {}", GodRepositoryDataJpa.class);
}

它打印:

Target (AOP) Class: class org.springframework.data.jpa.repository.support.SimpleJpaRepository 
Target (AOP) Class: class java.lang.Object 
Target expepcted Type Class: interface com.manuel.jordan.repository.data.jpa.GodRepositoryDataJpa 

观察到第一行是SimpleJpaRepository打印的,它是Spring Data

在幕后生成的类。

请求:如何在可能的情况下如何在运行时检索GodRepositoryDataJpa类型(我的自定义interface)来稍后完成断言而没有问题

注意:如果我尝试:

logger.info("Target (AOP) Class: {}", Arrays.asList(AopUtils.getTargetClass(godCrudRepository).getAnnotatedInterfaces()));
logger.info("Target (AOP) Class: {}", Arrays.asList(AopUtils.getTargetClass(godCrudRepository).getAnnotatedSuperclass()));

我知道了

Target (AOP) Class: [sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedParameterizedTypeImpl@77a0dd63] 
Target (AOP) Class: [sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl@543fe698]

0 个答案:

没有答案