zoukankan      html  css  js  c++  java
  • 常用注解和SpringBoot项目开发常用注解以及配置

    Servlet常用注解:

    @WebServlet:注册servlet

      编写好Servlet之后,接下来需要要告诉Web容器有关于这个Servlet的一些信息。

    在Servlet 3.0中,可以使用标注(Annotation)来告知容器哪些Servlet会提供服务以及额外信息。

    也就是说:web.xml中对Servlet配置,同样可以在 @WebServlet 注解中配置.

    下面使用xml与注解进行一个比对:

     Mybatis常用注解:

    @Param :传递参数

    • @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),
    • 作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。
    • @Param是地处Dao层,是为了传递多个参数,解决的是可读性和直观性;

    Mybatis-Plus常用注解:

    @TableName

      注解在类上,指定类和数据库表的映射关系。实体类的类名(转成小写后)和数据库表名相同时,可以不指定该注解。

    @TableId

      注解在实体类的某一字段上,表示这个字段对应数据库表的主键

    在插入数据的时候如果不指定id的数据,mp会自动进行填充数据(雪花算法)

    @TableField

      注解在某一字段上,指定Java实体类的字段和数据库表的列的映射关系。这个注解有如下几个应用场景。

    数据库表跟实体类属性不对应:比如数据库中是"name",实体类中是private String username,就需要通过指定数据库中的字段名称

    排除非表字段:若Java实体类中某个字段,不对应表中的任何列,它只是用于保存一些额外的,或组装后的数据,则可以设置exist属性为false,这样在对实体对象进行插入时,会忽略这个字段。

      排除非表字段也可以通过其他方式完成,如使用statictransient关键字

    不查询指定字段属性:在我们查询数据的时候有时候并不想查询显示某一列的数据,就可以设置select属性为false @TableField(select = false) 

    字段验证策略通过insertStrategyupdateStrategywhereStrategy属性进行配置,可以控制在实体对象进行插入,更新,或作为WHERE条件时,对象中的字段要如何组装到SQL语句中。

    字段填充策略:在表中做数据库的更新和插入字段的时候填充数据,只需要实体类中指定file属性

      步骤1、在实体类添加注解

      步骤2、自定义实现类 MyMetaObjectHandler:https://mp.baomidou.com/guide/auto-fill-metainfo.html

    @Version乐观锁注解

    @EnumValue注解在枚举字段上

    @TableLogic逻辑删除

      作用在实体类的属性上面,表示逻辑删除,指的是不会真正的从数据库中删除记录,而是将deleted(逻辑删除)字段更新为1

    *:逻辑删除实质上是执行update语句

    KeySequence序列主键策略(oracle

    InterceptorIgnore插件过滤规则

    Lombok常用注解:

    1、要在idea中添加lombok插件

    2、配置lombok的Maven依赖

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
    </dependency>
    View Code

    @Data :设置set/get等方法

    @AllArgsConstructor:有参构造

    @NoArgsConstructor:无参构造

    Spring常用注解

    xml跟注解在开发中的区别:

    xm|与注解:
      。xml更加万能,适用于任何场合!维护简单方便
      。注解不是自己类使用不了,维护相对复杂!
    xml与注解最佳实践:
      。xml用来管理bean;
      。注解常用于负责完成属性的注入;
      。我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持

     首先在xml文件中导入约束(以及注解的支持):

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
      <!--注解的支持--> <context:annotation-config/>
      <!--扫描包,说明在这个包下的注解会被识别-->
      <context:component-scan base-package="com.zhixi"/>
    </beans>

    @Component:注册bean

      放在类上面,表示一个组件,说明这个类被spring管理了、 等价于:<bean id="user" class="com.zhixi.pojo.类名"/> 

      属性:value 就是对象的名称,也就是bean的id值value的值是唯一的

    @Component(value = "user")
    如果不指定value属性就表示类名首字母小写:User-->user
      @Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!
        。dao (持久层)[@Repository]   放在dao的实现类上面,表示创建dao对象, dao对象是能访问数据库的。
        。service (业务层)[@Service] 放在service的实现类上面,创建service对象, service对象是做业务处理,比如处理事务等功能的、
        。controller (控制器层)[@Controller] 控制器对象,能够接受用户提交的参数,显示请求的处理结果。
      这四个注解功能都是一 样的,都是代表将某个类注册到Spring中, 装配Bean

    组件扫描器的声明需要在spring框架的核心配置文件来注册

    <context:component-scan base-package="指定Spring容器需要扫描的类所在包"/>

    @PathVariable

    映射 URL 绑定的占位符 带占位符的URL

    详见:RestFull风格【URL】

    @Value:给基本类型属性赋值

       1.作用:为对象中基本类型属性进行赋值
               类似于XML标签中<property name="基本属性名" value="赋值内容"/>
    
       2.使用:
               @Value可以修饰在属性上方,此时这个属性不需要声明set方法
               @Value可以修饰在set方法上方
       3.注意:
               @Value出现类必须使用@Componet进行修饰

      给基本类型属性赋值,也可以放在属性的setter方法上,是一样的

       @Value("张三")
        /*等价于:<property name = "name" value = "张三"/>*/
        private String name = "张志喜";
    

      扩展:使用${xxx}给属性赋值:

    1、xxx.properties
        name=张三
        age=23
    2、xml中加载属性配置文件
        <context:property-placeholder location="classpath:students.properties" file-encoding="gb2312"/>
    3、使用@Value注解
        @Value("${name}")
        private String name;
    
        @Value("${age}")
        private int age;

    @AutoWired :给引用类型属性赋值(默认是byType注入方式)

      1、spring 框架提供的注解,实现引用类型的赋值。  

      2、spring中通过注解给引用类型赋值,使用的是自动注入原理, 支持byName,byType

      3、放在属性上,自动装配名字、类型。也可以加到setter方法上[常用]

        @Autowired
        private School school;

    @Qualifier:配合@AutoWired使用(使用的是byName方式的注入)

      1、如果@Autowired自动装配的环境比较复杂【比如多个bean对象】,自动装配无法通过一个注解[@Autowired] 完成、

      2、我们可以使用@Qualifier(value="xx")配合@Autowired使用,指定一个唯一 的bean对象注入!

      @Autowired // 表示自动注入
        @Qualifier("mySchool") //表示找名字
        private School school;

    @Resouece:给引用类型属性赋值

      1、来自Jdk的注解,resource默认通过byname的方式实现

      2、如果找不到名字,则通过byType实现! 如果两个都找不到的情况下,就报错! [常用]

      3、也可以指定bean的id-->byName方式@Resource(name = "dog2")

     @ComponentScan :扫描包

      -该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>

      -或者是@ComponentScan("com.zhixi.pojo") 扫描指定的包、等同于:<context:component-scan base-package="com.zhixi.pojo"/>

    @Scope:指定作用域

      表示类的作用域,默认是 prototype【原型】,也可以指定作用域:

    @Scope("prototype")
    /*等价于:<bean scope="prototype"/>*/

    ===================================AOP==========================================================

    切面的执行时间,这个执行时间在规范中叫做Advice(邇知,增强),在aspectj框架中使用注解表示的。也何以使用xm1配置文件中的标签

    @Aspect:标注切面

    作用在类上面,标注这个类是一个切面

    @Before():在切面前执行什么方法

    @After():在切面后执行什么方法

    @Before("execution(* com.zhixi.service.*.*(..))")
    切入点表达式:
    解释如下:
    符号              含义
    execution()        表达式的主体;
    第一个”*“符号         表示返回值的类型任意;
    com.zhixi.service    AOP所切的服务的包名,即,我们的业务部分
    包名后面的”..“        表示当前包及子包
    第二个”*“            表示类名,*即所有类。
    (..)                表示任何方法名,括号表示参数,两个点表示任何参数类型 

     @AfterReturning

    @Around

    @AfterThrowing

    具体查看博客:AOP编程

    ===================================AOP==========================================================

    SpringMVC常用注解:

    @Controller:控制器

    作用在类上。用于声明Spring发类的实例是一个控制器

    @RequestMapper:请求映射

    相当于servlet中xml配置的<servlet-mapper>

    @RequestMapping注解用于映射urI到控制器类或个特定的处 理程序方法。可用于类或方法上。

    用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    1     // 请求映射,通过/some来访问到:WEB-INF/jsp/hello.jsp
    2     @RequestMapping("/some")
    3     public String getName(Model model){
    4         // 封装数据
    5         model.addAttribute("msg","hello annocation SpringMVC");
    6         // 返回视图的名字,会被视图解析器处理
    7         return "hello";
    8     }

    参数produces解决请求乱码问题: produces = "text/plain;charset=utf- 8" 

    默认使用“text/plain;charset= ISO- 8859- 1f作为contentType,导致中文有乱码,
    解决方案:给Reques tMapping增加一个属性produces, 使用这个属性指定新的content Type

    @PathVariable:路径变量

    作用在形参上面,用于表示这个参数是一个RestFull风格的URL

    参考博客  :RestFull风格

    @RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

      语法:@RequestParam(value=”参数名”)

      举例:

    <form action="/encoding" method="get">
        <div><input type="text" name="username"></div>
        <div><input type="submit" value="提交"></div>
    </form>
    @Controller
    public class EncodingDemo {
        @RequestMapping(value = "/encoding", method = RequestMethod.GET)
        public String encoding(@RequestParam("username") String name, Model model) {
            System.out.println(name);
            model.addAttribute("msg", name);
            return "encoding";
        }
    }

    如果在controller中获取前台页面请求参数的name,跟形参的名字不一致就会出现404、因为它找的是username,而形参中是String name

    所以要通过@RequestParam在Controller中进行指定。

     @RestController: 不会走视图解析器

      @Controller :会走视图解析器

      @RestController:不会走视图解析器,会返回一个字符串

      @Controller跟@RestController的区别:https://www.cnblogs.com/zhangzhixi/p/14316924.html

    JSON常用注解:

    使用前先导入Maven依赖

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.2</version>
    </dependency>

     @RestController: 作用在类上,表示程序不会走视图解析器

      @Controller :会走视图解析器

      @RestController:不会走视图解析器,会返回一个字符串

    @ResponseBody

      标注在方法上面表示不会走视图解析器,会直接返回一个字符串到页面

     @RestController 注解相当于 @ResponseBody  +  @Controller 结合在一起的作用

    @Controller
    public class JsonDemo {
        /**
         * @author zhangzhixi
         */
        @RequestMapping(value = "/json")
        @ResponseBody // 表示不会走视图解析器,会直接返回一个字符串到页面
        public String json1() throws JsonProcessingException {
            ObjectMapper mapper = new ObjectMapper();
            // 创建一个对象
            User user = new User("张志喜", 21, "男");
            // 将值写为字符串[将对象转为JSON格式字符串]
            String str = mapper.writeValueAsString(user);
            return str;
        }
    }

    参考:https://www.cnblogs.com/shuaifing/p/8119664.html

    SpringBoot常用注解:


    配置文件使用的:参考官方文档

    @Configuration:说明这是一个配置文件/配置类

    /**
     * @author zhangzhixi
     * @version 1.0
     * @date 2021-11-23 23:14
     * 标注了这是一个配置类,相当于一个Spring的配置文件
     */
    @Configuration
    public class MyConfig {
    
        /**
         * @Bean:注解表示这是一个在spring配置文件中注册的组件:
         *  默认方法名是bean的名称
         *  返回值类型是bean的类型
         *  返回值是给bean进行赋值
         *  可以通过@Bean("beanName")进行指定bean的名字
         */
        @Bean("tom")
        public Tom getTom() {
            return new Tom("tomcat", 2);
        }
    }

    @Configuration的参数:proxyBeanMethods 

      @Configuration( proxyBeanMethods = false)

    proxyBeanMethods属性默认值是true,也就是说该配置类会被代理(CGLIB),在同一个配置文件中调用其它被@Bean注解标注的方法获取对象时会直接从IOC容器之中获取;
        注解的意思是proxyBeanMethods配置类是用来指定@Bean注解标注的方法是否使用代理,默认是true使用代理,直接从IOC容器之中取得对象;
        如果设置为false,也就是不使用注解,每次调用@Bean标注的方法获取到的对象和IOC容器中的都不一样,是一个新的对象,所以我们可以将此属性设置为false来提高性能;

    简单来说就是如果:

      配置的组件之间有依赖关系,就配置成true(会加载变慢)

      没有需要进行依赖的的组件,就可以配置成false(使用的时候再创建,提高新能~)

    @ImportResource:用于导入Spring的配置文件,让配置文件里面的内容生效

    Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,不能自动识别;
    想让Spring的配置文件生效,加载进来; @ImportResource 标注在一个配置类上。

    如果将 @importResources 注释掉,那么helloKitty这个组件就不会注册到IOC容器中!

    @PropertySource

      // 绑定.properties配置文件

      @PropertySource(value = "classpath:application.properties")

      配合 @Value 注解给属性赋值

    @ConfigurationProperties

      // 作用在类上,常用于yaml配置文件,给属性赋值

      @ConfigurationProperties(prefix = "yaml配置文件属性名")

    @Conditional:按需加载组件

    可以参考博客:Spring Boot @Condition 注解,组合条件你知道吗

      //作用在类上,spring的底层注解,根据不同条件判断配置或类是否生效!

      @ConditionalOnWebApplication(type = ConditionalOnWebApplication. Type . SERVLET)

    @Enablexxx:开启某个功能

       @EnableWebSecurity :开启WebSecurity模式

       @EnableConfigurationProperties :自动配置属性--> @EnableConfigurationProperties(HttpProperties. class) 

       @EnableSwagger2 :开启swagger,参考博客:https://www.cnblogs.com/zhangzhixi/p/14348822.html   

       @EnableAsync :在程序的主入口类中添加,表示开启异步任务

    @ControllerAdvice:表示这是个增强类(底层是@Component,一个组件)

       @ExceptionHandler ({ArithmeticException.class,NullPointerException.class}):作用在方法上面,处理什么异常信息

    看下处理异常的设置:

     1 package com.zhixi.exception;
     2 
     3 import lombok.extern.slf4j.Slf4j;
     4 import org.springframework.web.bind.annotation.ControllerAdvice;
     5 import org.springframework.web.bind.annotation.ExceptionHandler;
     6 
     7 /**
     8  * @author zhangzhixi
     9  * @date 2021/3/31 16:50
    10  * 处理MVC的全局异常
    11  */
    12 
    13 @Slf4j
    14 @ControllerAdvice // 实际上是一个组件,被增强
    15 public class HandlingGlobalExceptions {
    16     /**
    17      * 在请求中有可能不止一个出现错误,我们写个方法用来处理错误
    18      * 处理数学错误
    19      */
    20     @ExceptionHandler({ArithmeticException.class, NullPointerException.class})
    21     public String handlerArithmeticException(Exception exc) {
    22         log.error("捕获到的异常是:", exc);
    23         // 视图地址(如果发生了数学运算异常,跟空指针异常,就会跳转到视图地址)
    24         return "login";
    25     }
    26 }
    View Code

    Swagger常用注解:

    swagger的使用参考博客:https://www.cnblogs.com/zhangzhixi/p/14348822.html

      controller中:

       @Api(tags = "请求控制类")  // 给controller类加注释

       @ApiOperation("用户赋值请求")  //给controller请求加注释  

      pojo实体类中:

        @ApiModel("用户类")  // 标注类的信息

       @ApiModelProperty("用户名")  // 标注属性信息

     异步任务

       @Async :在Service的类中或者方法中使用,表示这是一个异步的类或者方法

      @EnableAsync:在程序的主入口类中添加,表示开启异步任务

    SpringCloud用到的注解:

    @Accessors:链式注解

      @Accessors(chain = true):开启链式编程

    比如给属性字段赋值:dept.setD_no(1).setD_name("市场部").setD_source("db01");

    @LoadBalanced:负载均衡

     添加到要使用的bean上面:@LoadBalanced //配置负载均衡实现RestTemplate

    @EnableEurekaClient:开启eureka客户端

      通常使用在主启动类上

    ============熔断:Hystrix===============

     @HystrixCommand:熔断后备方法

    作用在方法上面,比如这个方法不会返回有效的数据抛出异常,就会去执行这个方法上面:HystrixCommand指定的方法

    // 添加熔断的后备方法
        @HystrixCommand(fallbackMethod = "hystrixGetDeptById")
    

    @EnableCircuitBreaker:启用断路器  

      作用在主启动类上

    ============熔断:Hystrix=============== 

    SpringBoot项目开发用到的配置:  

    # 关闭缓存
    spring.thymeleaf.cache=false
    
    # 项目虚拟目录,通过localhost/8080/zhixi访问首页
    server.servlet.context-path=/zhixi
    
    # 指定国际化配置文件的真实位置
    spring.messages.basename=iI18n.login

    provider:服务提供者配置:

    server:
      port: 8003
    
    # mybatis配置
    mybatis:
      type-aliases-package: com.zhixi.pojo
      config-location: classpath:mybatis/mybatis-config.xml
      mapper-locations: classpath:mybatis/mapper/*.xml
    
    # spring配置
    spring:
      application:
        name: springcloud-provider-dept # 三个服务名称一致
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://localhost:3306/db03?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
        username: root
        password: zhixi158
    
    # Eureka配置:配置服务注册中心地址
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
      instance:
        instance-id: springcloud-provider-dept-8003 #修改Eureka上的默认描述信息
    
    # info配置
    info:
      # 项目的名称
      app.name: zhixi-springcloud
      # 公司的名称
      company.name: com.zhixi.study
  • 相关阅读:
    Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)
    ASI简单实现网络编程
    Android批量图片加载经典系列——采用二级缓存、异步加载网络图片
    Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片
    IOS实现多媒体音频之音乐播放器
    Win7配置Nginx+PHP7
    PL/SQL Developer 11 64bit 安装和配置
    ESXi 6.0 配置
    配置Tomcat使用Redis作为session管理
    Win7安装Redis
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14223740.html
Copyright © 2011-2022 走看看