java 框架普遍问题答疑对于 spring bean 循环依赖难题,可使用 @lazy 注释延迟 bean 引入。在 spring 中,根据 @validated 注释可对 rest 控制器请求参数进行验证。针对 hibernate 延迟加载,可使用 fetchtype.lazy 当需要时候载入关系实体。在 spring webflux中,onerrormap 操作符适合于处理错误。在 spring cloud中,eureka 等服务发现架构适合于完成服务发现。
Java 架构普遍问题答疑
难题 1:怎样解决 Spring Bean 循环依赖?
@Autowired
privateServiceAserviceA;
@Autowired
privateServiceBserviceB;
解决方法:应用 @Lazy 注释,让 Spring 延迟引入 bean:
@Autowired
@Lazy
privateServiceAserviceA;
难题 2:在 Spring 中如何对 REST 控制板要求开展参数认证?
@PostMapping("/user")
publicUsercreateUser(@RequestBodyUseruser){
//...
}
解决方法:应用 JSR-303 规范的 @Validated 注释:
@PostMapping("/user")
publicUsercreateUser(@RequestBody @Validated Useruser){
//...
}
难题 3:怎么使用 Hibernate 延迟加载关系实体?
classUser{
//...
@OneToMany(mappedBy="user")
privateListorders;
}
解决方法:应用 FetchType.LAZY,仅在必须时候载入关系实体:
@OneToMany(mappedBy="user",fetch= FetchType.LAZY)
privateListorders;
实战案例
下列是一个基于 Spring Boot的实例应用软件,它展现了怎么使用 Spring DataJPA、Spring Security 和 Hibernate 来构建一个 REST API:
@SpringBootApplication
publicclassApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(Application.class,args);
}
}
@Entity
classUser{
//...
}
interfaceUserRepositoryextendsJpaRepository{}
@RestController
@RequestMapping("/api/users")
classUserController{
privatefinalUserRepositoryuserRepository;
//...
}
难题 4:在 Spring Webflux运用中怎样处理错误?
@PostMapping("/user")
publicMonocreateUser(@RequestBodyUseruser){
//...
}
解决方法:应用 onErrorMap 操作符将错误映射到适度的回应:
@PostMapping("/user")
publicMonocreateUser(@RequestBodyUseruser){
returnuserRepository.save(user)
.onErrorMap(e->newRuntimeException("Errorsavinguser"));
}
难题 5:在 Spring Cloud中如何做到服务发现?
解决方法:应用 Eureka 等服务发现架构:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
以上就是java架构普遍问题答疑的详细内容,大量请关注其他类似文章!