@Test
测试
@primary
有该注解的接口实现优先装配
@PostConstruct
这个方法将会在构造器之后调用
@PreDestroy
在销毁对象之前调用该方法
@Scope(“singleton”) / @Scope(“prototype”)
spring默认是单例模式,singleton不用写
prototype可以让每次实例化都是不同的对象
通常都是单例模式
@Controler
处理请求的组件
@Repository / @Repository(“<name>”)
数据库访问的组件
@Service
如果是业务组件,用service标明
@Component
通用
@Configuration
说明本类是配置类
@Bean
将该方法声明为第三方bean
@Autowired
@Qualifier(“<name>”)
依赖注入(Dependency Injection)
@Autowired
@Qualifier("alphaService") // 如果不加这句话就是将AlphaDao注入
private AlphaDao alphaDao; // spring容器将AlphaService注入alphaDao属性
@ResponseBody
加上表示返回的是个字符串,不加就是html文件
@EqualsAndHashCode
-
此注解会生成equals(Object other) 和 hashCode()方法。
-
它默认使用非静态,非瞬态的属性
-
可通过参数exclude排除一些属性
-
可通过参数of指定仅使用哪些属性
-
它默认仅使用该类中定义的属性且不调用父类的方法
-
可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。@EqualsAndHashCode(callSuper=true)
@Data
相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
@RequiredArgsConstructor
在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@Autowired注解,代码看起来很乱, lombok提供了一个该注解写在类上可以代替@Autowired注解,需要注意的是在注入时需要用final定义,或者使用@notnull注解。
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
@EqualsAndHashCode
class SubAddress implements Address{
@Getter(AccessLevel.PACKAGE) @Nonnull private final Address parentAddress;
@Getter(AccessLevel.PACKAGE) @Nonnull private final String id;
}
{@link xxx}
link后面可以跟类/方法/网址
按住command+鼠标左边点击link后的名字可以直接跳转
四个元注解
@Retention(RetentionPolicy.xxx)
注解的注解,指明注解的生命周期,具体的生命周期的长短由RetentionPolicy决定
- RetentionPolicy.SOURCE:表示注解只保留在源文件,当java文件编译成class文件,就会消失。如@override
- RetentionPolicy.Class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期
- RetentionPolicy.Runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在。需要在运行时去动态获取注解信息
@Target()
@Target用来表示注解作用范围,超过这个作用范围,编译的时候就会报错。
@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注释
@Target(ElementType.PACKAGE)——包,用于记录java文件的package信息
@Document
生成文档时要不要带该注解
@Inherited
决定子类要不要集成父类的注解
获取注解
Method.getDeclaredAnnotations();
Method.getAnnotation(Class<T> annotationClass); //
ControllerAdvice
用于修饰类,表示该类是Controller的全局配置类。
在此类中,可以对Controller做以下三种全局配置:异常处理方案、绑定数据方案、绑定参数方案
ExceptionHandler
用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获到的异常
ModelAttribute
用于修饰方法,该方法会在Controller方法执行前被调用,用于为Model对象绑定参数
DataBinder
用于修饰方法,该方法会在Controller方法执行前被调用,用于绑定参数的转换器