通过注解了解一个spring-boot项目

举报
Amrf 发表于 2020/12/14 12:39:23 2020/12/14
【摘要】 看到一个spring-boot开源项目,感觉写得不错,打算花一些时间分析分析,首先从使用到的注解角度初步的看看;## Swagger https://github.com/swagger-api/swagger-core/wiki/annotations @Api 标记一个类为Swagger资源   @ApiParam 为操作参数添加额外的meta数据   @ApiModelProperty...

看到一个spring-boot开源项目,感觉写得不错,打算花一些时间分析分析,首先从使用到的注解角度初步的看看;

## Swagger 

https://github.com/swagger-api/swagger-core/wiki/annotations 
  • @Api 标记一个类为Swagger资源   
  • @ApiParam 为操作参数添加额外的meta数据   
  • @ApiModelProperty 添加和操作model属性数据   
  • @ApiOperation 描述一个操作,典型的是一个特定路径的http请求
  • @ApiResponse 描述操作可能的响应 
  • @ApiIgnore 

## spring/spring-boot 

https://www.baeldung.com/spring-core-annotations 
https://www.javatpoint.com/spring-boot-annotations 
  • @Autowired  标记一个spring会去查找和注入的依赖 
  • @Bean 标记一个组装spring bean的工厂方法 
  • @Qualifier 和@Autowired一起提供一个bean的id或者name       
https://www.baeldung.com/spring-annotations-resource-inject-autowire 
https://stackoverflow.com/questions/4093504/resource-vs-autowired  
  • @Resource 来自JSR标准 @Value 注入属性到beans中,可以在构造,设置和段注入 
  • @Primary 当我们需要定义多个同一种类型的beans时,注入会因为不知道需要那个bean而失败,我们已经看到一个可选的方法:使用@Qualifier标记所有注入点,指定给bean特定的名称;然而,大多数时候我们只需要一个特定的bean而不是别的。我们可以用@Primary去简化这种场景。 
  • @ImportResource 我们可以导入xml配置通过这个注解 
  • @Component 这是个类级别的注解。它用来标记一个类为bean
https://www.baeldung.com/spring-postconstruct-predestroy 
  • @PostConstruct spring只会调用@PostConstruct一次,在初始化bean的属性之后。可以是任意的访控属性,但不能是静态的。 
  • @Transactional 
  •  @DateTimeFormat 用于在请求层级转换日期参数格式 - https://www.baeldung.com/spring-date-parameters   
  • @Controller 这是个类级别的注解。它是一种特殊化的@Component。它标记一个类为网络请求处理器。通常和@RequestMapping一同使用
  •  @ControllerAdvice 
  • @Service 这是个类级别的注解。它告诉Spring这个类包含业务逻辑。  

## spring Mvc and Rest Annotation

  • @RequestMapping 它用来映射网络请求。它有许多可选元素consumes, header, method, name, params, path, produces, and value
  • @GetMapping 它映射一个HTTP GET请求到一个特定的处理方法。它取代了@RequestMapping(method = RequestMethod.GET)
  • @PostMapping 它映射一个HTTP POST请求一个特定的处理方法。他取代了@RequestMapping(method = RequestMethod.POST)
  • @RequestBody 它用来绑定一个对象到方法形参给HTTP请求。内部使用HTTP消息转换器转换一个请求的消息体。
  • @ResponseBody  它绑定了一个返回值到相应体。它告诉spring boot框架去序列化一个返回对象到JSON和XML格式。
  • @RequestParam 它用来从URL中解析出query参数。
  • @RestController 它可以被认为是@Controller 和 @ResponseBody的组合。

## springboot anno

  • @Configuration
  • @SpringBootApplication 它是@EnableAutoConfiguration, @ComponentScan, 和 @Configuration的组合。
  • @ComponentScan
  • @ComponentScan.Filter
  • @EnableDiscoveryClient
  • @ConditionalOnMissingBean 
  • @ConditionalOnProperty

## spring aop

  • @Aspect 作用是把当前类标识为一个切面供容器读取
  •  @After final增强,不管是抛出异常或者正常退出都会执行
  • @Before 标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
  • @Pointcut Pointcut是植入Advice的触发条件。
https://www.baeldung.com/java-default-annotations 
  • @Retention
  • @Target
https://stackoverflow.com/questions/49624930/how-to-enable-requirespermissions-in-spring-mvc-project  
https://blog.csdn.net/qi923701/article/details/75224554  
https://zhuanlan.zhihu.com/p/37870725 
  • @RequiresPermissions

## JPA 

https://www.cnblogs.com/xuwenjin/p/8830850.html
https://stackoverflow.com/questions/37729770/what-is-the-use-of-table-annotation-in-jpa  
https://www.baeldung.com/jpa-entity-table-names 
  • @Table
  • @Id 
  • @Column
  • @GeneratedValue
  • @Transient

## poiji - excel 解析

  • @ExcelCell
  • @ExcelCellName
  • @ExcelRow 
  • @ExcelTable
  • @ExcelWidths
https://github.com/ozlerhakan/poiji   
https://www.wanaright.com/2020/04/10/annotation-poi-excel/ 
https://stackoverflow.com/questions/58981017/java-excel-pojo-mapping-in-poi

## spring kafka

  • @EnableKafka  
  •  @KafkaListener    
https://www.baeldung.com/spring-kafka

## Jackson 

  • @JsonFormat 
  • @JsonIgnore
  •  @JsonProperty
  •  @JsonSerialize
  •  @JacksonAnnotationsInside 
  • @JsonIgnoreProperties

https://dzone.com/articles/jackson-annotations-for-json-part-4-general
https://www.baeldung.com/jackson-jsonformat

## javax anno

  • @Max  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @Min 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @NotNull 注释的元素不能为null,可以为空字符串
  • @Nonnull
  • @Nullable
  • @Valid
  • @Pattern 被注释的元素必须符合指定的正则表达式。
  • @CheckForNull
https://blog.csdn.net/weixin_30439067/article/details/98076558
https://www.jianshu.com/p/32327ca2365f

## feign 一个java httpclient绑定

  • @EnableFeignClients
  • @Param
  • @RequestLine
  • @Headers
  • @HeaderMap
https://github.com/OpenFeign/feign 
https://stackoverflow.com/questions/43868680/feign-client-does-not-resolve-query-parameter

## JUnit 

  • @DisplayName
  • @Test 
https://www.journaldev.com/21674/junit-display-name-displayname

## 其他技术栈分析

swagger整合spring mvc教程 

https://blog.csdn.net/wangjun5159/article/details/47283125

spring后端国际化

https://www.logicbig.com/tutorials/spring-framework/spring-core/message-sources.html
https://stackoverflow.com/questions/2952196/ant-path-style-patterns/22636142#22636142


在 Spring Boot 项目中使用 Swagger 文档 

https://developer.ibm.com/zh/articles/j-using-swagger-in-a-spring-boot-project/
https://github.com/swagger-api/swagger-codegen

spring 过滤器、拦截器

jedisLock

https://redis.io/topics/distlock
https://github.com/kaidul/jedis-lock/blob/master/src/main/java/com/github/jedis/lock/JedisLock.java

MyBatis Redis Extension

https://github.com/mybatis/redis-cache
http://mybatis.org/mybatis-3/sqlmap-xml.html#cache
https://redis.io/commands#hash
https://spring.io/projects/spring-data-redis

MyBatis 通用 Mapper4 https://github.com/abel533/Mapper
Spring Boot API Project Seed、根据数据表名称生成对应的Model、Mapper、Service、Controller 

https://blog.csdn.net/qq_36857572/article/details/81143014
https://www.jianshu.com/p/9962be89e2cf
https://juejin.cn/post/6844903598422245383
https://github.com/lihengming/spring-boot-api-project-seed
MyBatis Pagination - PageHelper https://github.com/pagehelper/Mybatis-PageHelper

mybatis 二级缓存

https://blog.csdn.net/xiaolyuh123/article/details/73912617
https://stackoverflow.com/questions/31760648/get-all-keys-from-spring-reloadableresourcebundlemessagesource/31761884#31761884

通过User-Agent判断浏览器环境版本

https://blog.csdn.net/fzy629442466/article/details/84784940
http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox

elasticsearch 基于luence的非结构化索引库

https://www.elastic.co/guide/en/elasticsearch/reference/6.5/search-template.html

权重 

https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html
https://www.quora.com/What-is-inverted-index-It-is-a-well-known-fact-that-you-need-to-build-indexes-to-implement-efficient-searches-What-is-the-difference-between-index-and-inverted-index-and-how-does-one-build-inverted-index

IK分词 

https://github.com/medcl/elasticsearch-analysis-ik


Prefix与keyword分词器
Ngram与edge-Ngram分词器

Excel生成 

https://spreadsheet.dsl.builders/

Excel sheets 转换 Java classes 

https://github.com/ozlerhakan/poiji

Feign一款基于注解与动态代理的HTTP Client。

 https://github.com/OpenFeign/feign

Jackson Annotations for JSON (Part 4): General Annotations

https://dzone.com/articles/jackson-annotations-for-json-part-4-general
https://github.com/thymeleaf/thymeleaf/issues/623
http://www.scienjus.com/get-field-annotation-property-by-jackson-contextualserializer/

Intro to Apache Kafka with Spring 

https://www.baeldung.com/spring-kafka

Service(Mybatis/Eureka)
Eureka: 一款命名服务平台,输入是名称,返回是IP列表 

https://spring.io/guides/gs/service-registration-and-discovery/
https://medium.com/swlh/spring-cloud-service-discovery-with-eureka-16f32068e5c7


Ribbon:客户端负载均衡

https://www.baeldung.com/spring-cloud-rest-client-with-netflix-ribbon
https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html
https://howtodoinjava.com/spring-cloud/spring-boot-ribbon-eureka/


Swagger/SwaggerGenerator

java项目代码风格

https://github.com/google/google-java-format
intellij-java-google-style.xml

sonarqube代码检查

https://github.com/SonarSource/sonarqube

敏捷团队jira/rally

https://www.atlassian.com/zh/software/jira/comparison/jira-vs-rally

closure压缩,其实感觉现在很多前端框架已经采用webpack、gulp压缩打包,这个似乎没必要了、

https://github.com/google/closure-compiler/
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。