@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值,才让该方法处理请求。
@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