注解相关学习

@Data

配合lombok插件一起使用,可省略书写get、set方法同时提供equals()、hashCode()、toString()方法。

@EqualsAndHashCode(callSuper = true)

父子实体类都使用了@Data后,子类在比较值方面的使用,会有点欠缺。
此时可以使用@EqualsAndHashCode(callSuper = true) 解决子类实例之间的值比较问题,不能能解决父子之间值比较的问题。

@NoArgsConstructor

表示无参构造器

@AllArgsConstructor

表示全参构造器
每个类默认有空参构造,但是如果设置全参构造,则需要手动添加无参构造。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private long id;
    private String name;
    private String password;

    public String getName() {
        return "preTest_"+name;
    }

    public void setName(String name) {
        this.name = name+"_afterTest";
    }
}
    @Test
    public void myTest7(){
//        @Data中的get()、set()方法优先级:当类中写了get()、set()方法,会执行重写方法,不会遗漏逻辑。
        User user = new User(1,"testName","testPassword");
        System.out.println(user);//User(id=1, name=preTest_testName, password=testPassword)
        user.setName("testName2");
        System.out.println(user);//User(id=1, name=preTest_testName2_afterTest, password=testPassword)
    }

@ToString

重写toString()方法,默认情况下,它会按顺序打印类名称以及每个字段,并以逗号分隔。
默认情况下,将打印所有非静态字段。如果要跳过某些字段,可以使用@ ToString.Exclude注释这些字段。或者,您可以使用@ToString(onlyExplicitlyIncluded = true)准确指定要使用的字段,然后使用@ ToString.Include标记要包含的每个字段。

待补充代码

@Accessors

1、该注解主要作用是:当属性字段在生成 getter 和 setter 方法时,做一些相关的设置。
2、当它可作用于类上时,修饰类中所有字段,当作用于具体字段时,只对该字段有效。
3、该字段共有三个属性,分别是 fluent,chain,prefix

待补充代码

@Builder

为类生成相对略微复杂的构建器,作用于类,可以将其变成建造者模式,以链的形式调用
@Builder注解会导致默认值无效,如果不想让这个默认值被清除,就只能用另外一个注解来对属性进行设置:@lombok.Builder.Default
@Builder 不支持父类字段的生成,当一个实体类存在父类时,@Builder 只能生成当前类的字段构建方法。若需要用到父类的字段方法时, Lombok 提供了新的注解 @SuperBuilder 来应对这种情况

待补充代码

@SneakyThrows

使用范围: 只能作用在方法和构造函数之上
主要用于在没有 throws 关键字的情况下,隐蔽地抛出受检查异常,为我们平常开发中需要异常抛出时省去的 throw 操作。

待补充代码

@RequestParam

通常接收请求头携带参数,即类似路径后拼接参数 http:url?name=abc&password=123 这种格式。
如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400。

@RequestBody

用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),post请求。
在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

@PathVariable

restful风格路径参数接收,类似 http:url/abc/123 这种格式

@RestController

代表返回的是json格式的数据,是组合注解等价于@ResponseBody+@Controller

@RequestMapping

处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@RquestMapping8个属性
value:指定请求的实际地址。
method:指定请求的method类型(GET,POST,PUT,DELETE)等。
consumes:指定处理请求的提交内容类型(Context-Type)。
produces:指定返回的内容类型,还可以设置返回值的字符编码。
params:指定request中必须包含某些参数值,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才让该方法处理请求。

RequestMapping详细用法参考

@GetMapping

等价于 @RequestMapping(method = RequestMethod.GET)

@PostMapping

等价于 @RequestMapping(method = RequestMethod.POST)
类似还有 @PutMapping@DeleteMapping

@PostMapping和@GetMapping都可以用@RequestMapping代替,如果怕在映射的时候出错,可以统一写@RequestMapping,当然通常情况下还是建议分开写。最重要的是注意前端请求方式与后端接收方式保持一致。

@Autowired

用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源。

@Component

spring中的一个注解,它的作用就是实现bean的注入。在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:
1、@Controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层。
2、@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理
3、@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
而@Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@Select

目的是为了取代xml中的select标签,只作用于方法上面。

@Insert

@Update

@ConfigurationProperties

将 .properties 配置文件与对应的 Java bean 进行绑定

@EnableConfigurationProperties

使 @ConfigurationProperties 注解生效,并且将组件加入 IOC 容器中

1、Springboot 启动时默认是加载 application.properties 配置文件的,假设该配置文件中内容如下

local.host=127.0.0.1
local.port=8080

2、Java bean

// application.properties 中以 local 开头的配置与 Local 实体类进行绑定
@ConfigurationProperties(prefix = "local")
@Data
public class Local {
    private String host;
    private String port;
}	

3、测试类
使用 @EnableConfigurationProperties 注解使 Local 类上的 @ConfigurationProperties 注解生效

@SpringBootApplication
// 1、使 @ConfigurationProperties 生效
// 2、将 Local 组件加入 IOC 容器中
// @EnableConfigurationProperties 注解只要能加入到 IOC 容器中,不一定要在启动类上
@EnableConfigurationProperties(Local.class)
public class Springboot01Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext ioc = SpringApplication.run(Springboot01Application.class, args);
        Local local = ioc.getBean(Local.class);
        //Local(host=127.0.0.1,port=8080)
        System.out.println(local);
    }
}

@Order

注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响;
注解有一个int类型的参数,可以不传,默认是最低优先级;参数值越小优先级越高;

@ConditionalOnProperty

在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效。

@Slf4j
@ControllerAdvice
@ConditionalOnProperty(prefix = "faster.secret", name = "enabled", havingValue = "true")
@EnableConfigurationProperties({SecretProperties.class})
@Order(1)
public class SecretRequestAdvice extends RequestBodyAdviceAdapter {
   //加解密配置类
}

配置文件中 ,值为true 则加解密配置生效

faster.secret.enabled=true

@ControllerAdvice

@ControllerAdvice就是@Controller 的增强版。@ControllerAdvice主要用来处理全局数据,比如全局异常处理。

@Cleanup

使用场景:当在处理文件对象,或者数据库资源时,我们总是会忘记close,可能引发内存溢出。
使用@Cleanup确保在代码执行路径退出当前作用域之前自动清除给定资源。

@Cleanup注释来注释任何局部变量声明来执行此操作,如下所示:
@Cleanup InputStream in = new FileInputStream(“some / file”);
在所在范围的末尾,调用in.close()。 保证通过try / finally构造运行此调用。

如果要清理的对象类型没有close()方法,而是其他一些无参数方法,则可以指定此方法的名称,如下所示:
@Cleanup(“dispose”)org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent,0);
默认情况下,清除方法假定为close()。 不能通过@Cleanup调用带有1个或多个参数的清理方法。

@Singular

  • 作用于集合字段,需要配合 @Builder 使用
  • 使用 @Singular 注解一个集合字段(如果没有指定 value 属性值,那么集合字段名需要是复数形式),会生成两个添加元素方法
    一个向集合添加单个元素(方法名:集合字段名的单数形式 / value 属性值)
    一个将另一个集合的所有元素添加到集合中(方法名:集合字段名)
  • 还生成了 clear 方法(方法名:clear + 集合字段名,驼峰命名)。 这些 singular 构建器相对而言是有些复杂的,主要是来保证以下特性:
    在调用 build 方法时,生成的集合是不可变的
    在调用 build 方法之后调用其中一个添加元素方法或 clear 方法不会修改任何已经生成的对象。如果对集合修改之后,再调用 build 方法,则会创建一个基于上一个对象创建的对象实体
    生成的集合将被压缩到最小的可行格式,同时保持高效
  • @Singular 只能应用于 lombok 已知的集合类型。目前,支持的类型有:
    Iterable、Collection、List (一般情况下,生成的不可修改的 ArrayList)
    Set、SortedSet、NavigableSet (一般情况下,生成可变大小不可修改的 HashSet 或者 TreeSet)
    Map、SortedMap、NavigableMap (一般情况下,生成可变大小不可修改的 HashMap 或者 TreeMap)
  • 在调用 build 方法来创建实例对象时, 并没有直接使用 Collections.unmodifiableList(Collection c) 此方法来创建实例,而是分为三种情况
    第一种,当集合中没有元素时,创建一个空集合
    第二种,当集合中存在一个元素时,创建一个不可变的单元素集合
    第三种,根据当前集合的元素数量创建对应合适大小的集合
  • value:指定集合字段名方法名,默认为 “”
    如果指定了 value 值,那么添加单个元素的方法名为 value 属性值
    如果没有指定 value 值,那么集合字段名需要是复数形式

@Singular用法转载自:lombok 基础注解之 @Singular

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值