错误:java.lang.IllegalArgumentException: No visible constructors in class org.springframework.hateoas.config.HypermediaSupportBeanDefinitionRegistrar$DefaultObjectMapperCustomizer
大多数情况下,我使用link中给出的示例,可以在github repository找到以下代码
注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface NeedTestClass {
}
方面:
@After("@args(NeedTestClass)")
public void afterReturningAtArgs() {
log.info("aspect: after @args {}");
}
服务:
@Slf4j
@Component
public class BusinessService {
public void logicWithAnnotatedArgs1(Child c) {
log.info("service");
}
}
Pojo(顶级,不是子类):
@NoArgsConstructor // tried with or without
@NeedTestClass
public class Child {}
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
@SpringBootTest
public class AopTest {
@Autowired
private BusinessService myBusinessService;
@Test
public void testAtArgsPCD() {
myBusinessService.logicWithAnnotatedArgs1(new Child());
}
我试图检查aop和带注释的类继承,但似乎第一步不行。我试过@annotation()和这个()PCD都没关系。
编辑: 到目前为止,我想知道错误可能与bean加载序列有关。
答案 0 :(得分:2)
您的GitHub项目甚至无法编译。你有没有测试过吗?首先通过试验和错误我必须添加所有这些依赖项:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba.druid</groupId>
<artifactId>druid-wrapper</artifactId>
<version>0.2.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
接下来,我注意到Maven构建似乎没有启动本地(127.0.0.1)数据库,因为Spring Boot在启动时说这个:
(...)
2018-01-02 17:57:18.882 INFO 14480 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
2018-01-02 17:57:20.007 ERROR 14480 --- [tionPool-Create] com.alibaba.druid.pool.DruidDataSource : create connection error
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:590) ~[mysql-connector-java-6.0.6.jar:6.0.6]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:57) ~[mysql-connector-java-6.0.6.jar:6.0.6]
(...)
在我检查您的实际问题之前,您是否介意将GitHub项目重构为MCVE?这样,错误就无法重现。
但话虽如此,我确实注意到你的POM和Java文件中有些东西:也许问题不在你想象的地方。我可以看到你想将Lombok与Spring AOP结合使用。根据我的回答here,AspectJ和Lombok之间存在兼容性问题。也许它们也会影响Spring AOP。那么你可以暂时测试没有@Slf4j
和其他龙目岛的东西吗?一旦你修复了你的项目,我也可以自己测试。
修复GitHub repo项目后更新:
现在我可以构建并运行您的程序了,谢谢。似乎参数以某种方式传递给您不希望定位的内部Spring类。所以只需修改你的切入点:
@After("@args(com.example.demosm.my.aop.NeedTestClass) && within(com.example.demosm..*)")