注解

注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”。
JVM的角度看,注解本身对代码逻辑没有任何影响,如何使用注解完全由工具决定。
RUNTIME类型的注解是在程序运行期能够读取的注解,它们在加载后一直存在于JVM中,这也是最常用的注解。

  • 注解的四大作用:
    1、生成文档,通过代码里标识的元数据生成javadoc文档。
    2、编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
    3、编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
    4、运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
  • 定义注解
    定义一个注解时,还可以定义配置参数。配置参数必须是常量。如果只写注解,相当于全部使用默认值。

@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)——包

@Retention:注解的保留位置

RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

@Document:说明该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类中的该注解

Java使用@interface来自定义注解。应当设置@Retention(RetentionPolicy.RUNTIME)便于运行期读取该Annotation

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Report {
    int type() default 0;
    String level() default "info";
    String value() default "";
}

Java提供的使用反射API读取Annotation的方法

判断某个注解是否存在
Class.isAnnotationPresent(Class);
使用反射API读取Annotation
Class.getAnnotation(Auth.class);
注意:一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解
@Retention(RetentionPolicy.RUNTIME)
public @interface Auth {
Stirng[] userCode();
}
  • 使用注解:
    在方法上加上注解@Auth(userCode="123")
    1.所做的操作都是先通过反射获取对应元素
    Class cls = Auth.class;
    2.再获取元素上面的注解
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    Method method = handlerMethod.getMethod();
    Auth annotation = method.getAnnotation(cls);
    3.最后得到注解的属性值
    String[] aa = annotation.userCode();

  • 常用注解

controller层

@Controller
用于标注控制层
@Autowired
自动装配,其作用是消除Java代码里面的getter/setterbean属性中的property
@ApiOperation(notes="add",value="新增")
生成swagger
@RequestMapping(value,method,consumes,produces,params,headers)
用来处理请求地址映射的注解
@PostMapping(value="/Major/Info")
Spring MVC里面提供的Resultful风格的支持
@GetMapping(value="")
@PutMapping(value="")
@DeleteMapping(value="")
@Auth(desc="新增",userCode="",groupCode="")
@RequestBody
用来接收页面传递给后台的json字符串中数据。
注意:Get方法无请求体,所以使用@RequestBody接收数据时,前端不能使用Get方式提交数据,而应该使用Post方式提交。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如jsonxml等)使用。
@RequestParam
获取前端参数
@Valid
验证注解是否符合要求
@ResponseBody
作用于方法,表明此方法的返回值写入Http response body

Serveice层

@Service
用于标注服务层,主要用来进行业务的逻辑处理
@Autowired
自动装配
@Override
加在覆写的方法前面,用来检查方法的正确性
@Transactional(rollbackFor=Exception.class)
参数有name,propagation,isolation,timeout,read-only,rollback-for,no-rollback-for

dao层

@repository
用于标注数据访问层
@Mapper
声明此接口为一个mapper,使用此注解无需再写xml映射文件
@Param("reqid") String reqid
传递参数

entity

@Data
注解在类上,为类提供读写属性
@EqulasAndHashCode(callSuper=false)
生成equals()hashCode()方法
@Accessors(chain=true)
用来配置lombok如何产生和显示getterssetters的方法。
chain默认false,如果为真,产生的setter返回的是this而不是void
@TableName("CustomerTable")
@TableId(value="",type=)
声明此属性为主键
@TableField(value="", updateStrategy= FieldStrategy.IGNORED)
FieldStrategy字段验证策略
1.ignored 所有的字段都会设置到sql语句中
2.not_null 默认策略,忽略null的字段,但不忽略""
3.not-empty 忽略null和空串,即设置值为null或""不会设置到sql

dto

@JsonProperty
@ApoModelProperty
@Size
@NotEmpty
@NotBlank
@NotNull

common

@ConfigrationProperties

其他

@Component
把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>
泛指各种组件,就是说当我们的类不属于各种归类的时候
(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类

@Scope("prototype")
定义Bean的作用域和生命过程
值有:singleton,prototype,session,request,session,globalSession

注解分为两类:

1、一类是注册Bean
@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中。
2、一类是使用Bean
即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装。
比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean
注意:@Autowired , @Resource可以获取接口类型,不能获取抽象类类型
spring中autowired和resource注解的区别

  • Spring中Bean的概念
    Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean
    bean是一个由Spring IoC容器实例化、组装和管理的对象。

@NoArgsConstructor

注解在类上,为类提供一个无参的构造方法。

// 使用注解
@NoArgsConstructor
public class Shape {
    private int x;
    @NonNull
    private double y;
    @NonNull
    private String name;
}
 
// 不使用注解
public class Shape {
    private int x;
    private double y;
    private String name;
 
    public Shape(){
    }
}

@AllArgsConstructor

(1)注解在类上,为类提供一个全参的构造方法。
(2)默认生成的方法是 public 的,如果要修改方法修饰符可以设置 AccessLevel 的值。

// 使用注解
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class Shape {
    private int x;
    @NonNull
    private double y;
    @NonNull
    private String name;
}
 
// 不使用注解
public class Shape {
    private int x;
    private double y;
    private String name;
 
    protected Shape(int x, double y, String name){
        this.x = x;
        this.y = y;
        this.name = name;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容