Jtoss Jtoss
首页
  • 数据结构与算法

    • 数据结构与算法 - 概述
    • 数据结构与算法 - 复杂度分析
    • 数据结构 - 线性表
    • 算法 - 常见排序算法
  • 代码规范

    • 代码简洁之道
    • 阿里巴巴开发手册
    • 谷歌Java编程风格指南
  • 设计模式

    • 编写高质量代码概述
    • 面向对象
    • 设计原则
    • 设计模式-创建型
    • 设计模式-结构型
    • 设计模式-行为型(上)
    • 设计模式-行为型(下)
    • 浅析框架源码中的设计模式
    • 业务框架实战案例
  • MySQL 基础

    • MySQL - 数据库设计规范
    • MySQL - 必知必会
  • MySQL 进阶

    • MySQL - 基础架构
    • MySQL - InnoDB存储引擎
    • MySQL - InnoDB缓冲池
    • MySQL - 事务与锁
    • MySQL - 索引
    • MySQL - 查询执行计划
    • MySQL - 性能优化
  • Redis 系列

    • Redis入门 - 基础相关
    • Redis进阶 - 数据结构
    • Redis进阶 - 持久化RDB和AOF
    • Redis进阶 - 事件机制
    • Redis进阶 - 事务
    • Redis进阶 - 高可用高可扩展
    • Redis进阶 - 缓存问题
    • Redis进阶 - 性能调优
  • Java 基础

    • Java 基础 - 知识点
    • Java 基础 - 面向对象
    • Java 基础 - Q/A
  • Java 进阶 - 集合框架

    • Java 集合框架详解
  • Java 进阶 - 多线程与并发

    • Java 并发 - 理论基础
    • Java 并发 - 线程基础
    • Java 并发 - 各种锁
    • Java 并发 - 关键字 volatile
    • Java 并发 - 关键字 synchronized
    • JUC - CAS与原子操作
    • JUC - 锁核心类AQS
    • JUC - 锁接口和类简介
    • JUC - 并发容器简介
    • JUC - 通信工具类
    • JUC - Fork-Join框架
    • JUC - 线程池
  • Java 进阶 - JVM

    • JVM - 概述
    • JVM - 类加载机制
    • JVM - 内存结构
    • JVM - 垃圾回收机制
    • JVM - 性能调优
  • Maven系列

    • Maven基础知识
    • Maven项目构建
    • Maven多模块配置
  • Spring 框架

    • Spring 框架 - 框架介绍
    • Spring 框架 - IOC详解
    • Spring 框架 - AOP详解
    • Spring 框架 - SpringMVC详解
  • Spring Boot 系列

    • Spring Boot - 开发入门
    • Spring Boot - 接口相关
  • Spring Cloud 系列
  • Mybatis 系列

    • Mybatis - 总体框架设计
    • Mybatis - 初始化基本过程
    • Mybatis - sqlSession执行过程
    • Mybatis - 插件机制
    • Mybatis - 事务管理机制
    • Mybatis - 缓存机制
  • 业务常见问题

    • Java 业务开发常见错误(一)
    • Java 业务开发常见错误(二)
    • Java 业务开发常见错误(三)
    • Java 业务开发常见错误(四)
    • Java 业务开发常见错误(五)
    • Java 业务开发常见错误(六)
  • IDEA系列

    • IDEA 2021开发环境配置
    • IDEA 快捷键
  • Git系列

    • git status中文乱码
  • 其他

    • Typora+Picgo 自动上传图片
    • hsdis 和 jitwatch
  • 实用技巧
  • 收藏
  • 摄影
  • 学习
  • 标签
  • 归档

Jason Huang

后端程序猿
首页
  • 数据结构与算法

    • 数据结构与算法 - 概述
    • 数据结构与算法 - 复杂度分析
    • 数据结构 - 线性表
    • 算法 - 常见排序算法
  • 代码规范

    • 代码简洁之道
    • 阿里巴巴开发手册
    • 谷歌Java编程风格指南
  • 设计模式

    • 编写高质量代码概述
    • 面向对象
    • 设计原则
    • 设计模式-创建型
    • 设计模式-结构型
    • 设计模式-行为型(上)
    • 设计模式-行为型(下)
    • 浅析框架源码中的设计模式
    • 业务框架实战案例
  • MySQL 基础

    • MySQL - 数据库设计规范
    • MySQL - 必知必会
  • MySQL 进阶

    • MySQL - 基础架构
    • MySQL - InnoDB存储引擎
    • MySQL - InnoDB缓冲池
    • MySQL - 事务与锁
    • MySQL - 索引
    • MySQL - 查询执行计划
    • MySQL - 性能优化
  • Redis 系列

    • Redis入门 - 基础相关
    • Redis进阶 - 数据结构
    • Redis进阶 - 持久化RDB和AOF
    • Redis进阶 - 事件机制
    • Redis进阶 - 事务
    • Redis进阶 - 高可用高可扩展
    • Redis进阶 - 缓存问题
    • Redis进阶 - 性能调优
  • Java 基础

    • Java 基础 - 知识点
    • Java 基础 - 面向对象
    • Java 基础 - Q/A
  • Java 进阶 - 集合框架

    • Java 集合框架详解
  • Java 进阶 - 多线程与并发

    • Java 并发 - 理论基础
    • Java 并发 - 线程基础
    • Java 并发 - 各种锁
    • Java 并发 - 关键字 volatile
    • Java 并发 - 关键字 synchronized
    • JUC - CAS与原子操作
    • JUC - 锁核心类AQS
    • JUC - 锁接口和类简介
    • JUC - 并发容器简介
    • JUC - 通信工具类
    • JUC - Fork-Join框架
    • JUC - 线程池
  • Java 进阶 - JVM

    • JVM - 概述
    • JVM - 类加载机制
    • JVM - 内存结构
    • JVM - 垃圾回收机制
    • JVM - 性能调优
  • Maven系列

    • Maven基础知识
    • Maven项目构建
    • Maven多模块配置
  • Spring 框架

    • Spring 框架 - 框架介绍
    • Spring 框架 - IOC详解
    • Spring 框架 - AOP详解
    • Spring 框架 - SpringMVC详解
  • Spring Boot 系列

    • Spring Boot - 开发入门
    • Spring Boot - 接口相关
  • Spring Cloud 系列
  • Mybatis 系列

    • Mybatis - 总体框架设计
    • Mybatis - 初始化基本过程
    • Mybatis - sqlSession执行过程
    • Mybatis - 插件机制
    • Mybatis - 事务管理机制
    • Mybatis - 缓存机制
  • 业务常见问题

    • Java 业务开发常见错误(一)
    • Java 业务开发常见错误(二)
    • Java 业务开发常见错误(三)
    • Java 业务开发常见错误(四)
    • Java 业务开发常见错误(五)
    • Java 业务开发常见错误(六)
  • IDEA系列

    • IDEA 2021开发环境配置
    • IDEA 快捷键
  • Git系列

    • git status中文乱码
  • 其他

    • Typora+Picgo 自动上传图片
    • hsdis 和 jitwatch
  • 实用技巧
  • 收藏
  • 摄影
  • 学习
  • 标签
  • 归档
  • Maven系列

  • Spring 框架

  • Spring Boot

    • SpringBoot - Logback
    • SpringBoot - 热部署
    • SpringBoot - 常用注解
      • SpringBoot - 接口统一返回格式
      • SpringBoot - 接口参数校验
      • SpringBoot - 接口文档之Swagger
      • SpringBoot - 接口文档之Smart-Doc
      • SpringBoot - 接口版本
    • Spring Cloud

    • Spring
    • Spring Boot
    Jason
    目录

    SpringBoot - 常用注解

    # SpringBoot - 常用注解

    # @SpringBootApplication

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public @interface SpringBootApplication {
    
    	/**
    	 * Exclude specific auto-configuration classes such that they will never be applied.
    	 * @return the classes to exclude
    	 */
    	Class<?>[] exclude() default {};
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    定义在main方法入口类处,用于启动sping boot应用项目

    # @EnableAutoConfiguration

    此注释自动载入应用程序所需的所有Bean,这依赖于Spring Boot在类路径中的查找。

    # @ImportResource

    加载xml配置,一般是放在启动main类上

    @ImportResource("classpath*:/spring/*.xml")  单个
    
    @ImportResource({"classpath*:/spring/1.xml","classpath*:/spring/2.xml"})   多个
    
    1
    2
    3

    # @Value

    application.properties定义属性,直接使用@Value注入即可

    public class A{
    	 @Value("${push.start:0}")    //如果缺失,默认值为0
         private Long  id;
    }
    
    1
    2
    3
    4

    # @ConfigurationProperties(prefix="person")

    可以新建一个properties文件,ConfigurationProperties的属性prefix指定properties的配置的前缀,通过location指定properties文件的位置

    @ConfigurationProperties(prefix="person")
    public class PersonProperties {
    	private String name ;
    	private int age;
    }
    
    1
    2
    3
    4
    5

    # @EnableConfigurationProperties

    用 @EnableConfigurationProperties注解使 @ConfigurationProperties生效,并从IOC容器中获取bean。

    # @RestController

    组合@Controller和@ResponseBody,当你开发一个和页面交互数据的控制时,比如bbs-web的api接口需要此注解

    # @RequestMapping("/api/test")

    用来映射web请求(访问路径和参数)、处理类和方法,可以注解在类或方法上。注解在方法上的路径会继承注解在类上的路径。

    produces属性: 定制返回的response的媒体类型和字符集,或需返回值是json对象

    @RequestMapping(value="/api/test",produces="application/json;charset=UTF-8",method = RequestMethod.POST)
    
    1

    一般使用 @GetMapping、@PostMapping等。

    # @RequestParam

    获取request请求的参数值

     public List<CopperVO> getOpList(HttpServletRequest request,
                                        @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
                                        @RequestParam(value = "pageSize", required = false) Integer pageSize) {
     
      }
    
    1
    2
    3
    4
    5

    # @ResponseBody

    支持将返回值放在response体内,而不是返回一个页面。比如Ajax接口,可以用此注解返回数据而不是页面。此注解可以放置在返回值前或方法前。

    另一个玩法,可以不用@ResponseBody。
    继承FastJsonHttpMessageConverter类并对writeInternal方法扩展,在spring响应结果时,再次拦截、加工结果
    // stringResult: json返回结果
    //HttpOutputMessage outputMessage
    
     byte[] payload = stringResult.getBytes();
     outputMessage.getHeaders().setContentType(META_TYPE);
     outputMessage.getHeaders().setContentLength(payload.length);
     outputMessage.getBody().write(payload);
     outputMessage.getBody().flush();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # @Bean

    @Bean(name="bean的名字",initMethod="初始化时调用方法名字",destroyMethod="close")

    定义在方法上,在容器内初始化一个bean实例类。

    @Bean(destroyMethod="close")
    @ConditionalOnMissingBean
    public PersonService registryService() {
    		return new PersonService();
    	}
    
    1
    2
    3
    4
    5

    # @Service

    用于标注业务层组件

    # @Controller

    用于标注控制层组件

    # @RestController

    用于标注控制层组件,Rest风格

    # @Repository

    用于标注数据访问组件,即DAO组件

    # @Component

    泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    # @PostConstruct

    spring容器初始化时,要执行该方法

    @PostConstruct  
    public void init() {   
    }   
    
    1
    2
    3

    # @PathVariable

    用来获得请求url中的动态参数

    @Controller  
    public class TestController {  
    
         @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
         public String getLogin(@PathVariable("userId") String userId,  
             @PathVariable("roleId") String roleId){
               
             System.out.println("User Id : " + userId);  
             System.out.println("Role Id : " + roleId);  
             return "hello";  
         
         }  
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # @ComponentScan

    注解会告知Spring扫描指定的包来初始化Spring

    @ComponentScan(basePackages = "com.bbs.xx")
    
    1

    # @EnableZuulProxy

    路由网关的主要目的是为了让所有的微服务对外只有一个接口,我们只需访问一个网关地址,即可由网关将所有的请求代理到不同的服务中。Spring Cloud是通过Zuul来实现的,支持自动路由映射到在Eureka Server上注册的服务。Spring Cloud提供了注解@EnableZuulProxy来启用路由代理。

    # @Autowired

    在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。

    当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false),这等于告诉 Spring: 在找不到匹配 Bean 时也不报错

    # @Configuration

    @Configuration("name")//表示这是一个配置信息类,可以给这个配置类也起一个名称
    @ComponentScan("spring4")//类似于xml中的<context:component-scan base-package="spring4"/>
    public class Config {
    
        @Autowired//自动注入,如果容器中有多个符合的bean时,需要进一步明确
        @Qualifier("compent")//进一步指明注入bean名称为compent的bean
        private Compent compent;
    
        @Bean//类似于xml中的<bean id="newbean" class="spring4.Compent"/>
        public Compent newbean(){
            return new Compent();
        }   
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # @Import(Config1.class)

    导入Config1配置类里实例化的bean

    @Configuration
    public class CDConfig {
    
        @Bean   // 将SgtPeppers注册为 SpringContext中的bean
        public CompactDisc compactDisc() {
            return new CompactDisc();  // CompactDisc类型的
        }
    }
    
    @Configuration
    @Import(CDConfig.class)  //导入CDConfig的配置
    public class CDPlayerConfig {
    
        @Bean(name = "cDPlayer")
        public CDPlayer cdPlayer(CompactDisc compactDisc) {  
             // 这里会注入CompactDisc类型的bean
             // 这里注入的这个bean是CDConfig.class中的CompactDisc类型的那个bean
            return new CDPlayer(compactDisc);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    # @Order

    @Order(1),值越小优先级超高,越先运行

    # @ConditionalOnExpression

    @Configuration
    @ConditionalOnExpression("${enabled:false}")
    public class BigpipeConfiguration {
        @Bean
        public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {
            return new OrderMessageMonitor(configContext);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    开关为true的时候才实例化bean

    # @ConditionalOnProperty

    这个注解能够控制某个 @Configuration 是否生效。具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。如果返回值为false,则该configuration不生效;为true则生效。

    https://blog.csdn.net/dalangzhonghangxing/article/details/78420057

    # @ConditionalOnClass

    该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类

    @Configuration
    @ConditionalOnClass({Gson.class})
    public class GsonAutoConfiguration {
        public GsonAutoConfiguration() {
        }
    
        @Bean
        @ConditionalOnMissingBean
        public Gson gson() {
            return new Gson();
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # @ConditionalOnMisssingClass({ApplicationManager.class})

    如果存在它修饰的类的bean,则不需要再创建这个bean;

    # @ConditionOnMissingBean(name = "example")

    表示如果name为“example”的bean存在,该注解修饰的代码块不执行。


    著作权归@pdai所有 原文链接:https://pdai.tech/md/spring/springboot/springboot-x-hello-anno.html

    #Spring Boot#注解
    上次更新: 2023-04-20
    SpringBoot - 热部署
    SpringBoot - 接口统一返回格式

    ← SpringBoot - 热部署 SpringBoot - 接口统一返回格式→

    最近更新
    01
    开始
    01-09
    02
    AI工具分享
    01-09
    03
    AI 导读
    01-07
    更多文章>
    Theme by Vdoing | Copyright © 2022-2025 Jason Huang | 闽ICP备2025088096号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式