注解
@RequiredArgsConstructor
在写controller或者Service层的时候,需要很多mapper接口或者另外的service接口,这时候就会写很多的@autowired注解,代码看起来很乱lombok提供了一个注解
@RequiredArgsConstructor
在类上可生产以代替@autowrired注解,需要注意的是在注入时需要使用final定义或者@notnull注解
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
注意
- 必须声明变量为final
- 根据构造器注入的,相当于容器调用带有一组参数的类构造器函数时,基于构造函数的DI就完成了,其中每个参数代表一个对其他类的依赖,基于构造方法为属性赋值,容器通过调用类的构造方法将其注入
@Qualifier
在controller中需要注入service那么我的这个service有俩个实现类如何区分开呢
Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一(@service需要设置默认参数)
@Accessors
Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性
fluent
fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。如下
@Data
@Accessors(fluent = true)
public class User {
private Long id;
private String name;
// 生成的getter和setter方法如下,方法体略
public Long id() {}
public User id(Long id) {}
public String name() {}
public User name(String name) {}
}
chain
chain的含义是链式的,设置为true,啧setter方法返回当前对象
@Data
@Accessors(chain = true)
public class User {
private Long id;
private String name;
// 生成的setter方法如下,方法体略
public User setId(Long id) {}
public User setName(String name) {}
}
prefix的含义是前缀,生成的getter和setter方法会忽略指定的前缀名
@Data
@Accessors(prefix = "p")
class User {
private Long pId;
private String pName;
// 生成的getter和setter方法如下,方法体略
public Long getId() {}
public void setId(Long id) {}
public String getName() {}
public void setName(String name) {}
}
SpringSecurity
@EnableWebSecurity
@EnableWebSecurity是开启SpringSecurity的默认行为,它的上面有一个Import注解导入了WebSecurityConfiguration类,也就是说我们加上了@EnableWebSecurity这个注解,就是往IOC容器中注入了WebSecurityConfiguration这个类。
@EnableGlobalMethodSecurity
Spring Security默认是在配置类中使用URL进行拦截,禁用使用注解,想要开启注解使用则需要在配置类上加上 如下注解@EnableGlobalMethodSecurity
;