我有一个与以下应用配合使用的应用
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]