(1)jdk自带的注解(5个):经常使用的就一个:@Override
(2)元注解(5个):经常使用的两个:@Target(指定注解使用的位置) @Retention(描述生命周期)
(3)自定义注解:(框架里都是)web
@Target 指定其余注解可使用的位置(包上、类上、方法上、属性上) @Retention 指定其余注解的生命周期(源文件中、运行时、class文件中)
自定义注解须要配合元注解使用(经常使用@Target&@Retention )
(1)其余注解使用在单个位置(如何指定?) @Target(ElementType.Type) (2)其余注解使用在多个位置(如何指定?)底层维护的是一个数组 @Target({ElementType.Type,ElementType.Field}) (3)@Target注解的取值{值被维护在ElementType中} ElementType.Type ElementType.Field ElementType.Method
@Retention注解的取值{值被维护在RetentionPolicy工具类中} RetentionPolicy.SOURCE RetentionPolicy.CLASS RetentionPolicy.RUNTIME
(1)定义: @inteface 注解名{} (2)配合元注解,指定自定义注解使用的位置,以及自定义注解的生命周期
定义(1):ajax
@inteface Annotation{ String name(); //String name() default "lisi";//给name赋默认值lisi }
使用(1):spring
@Annotation(name="zhangsan") public void sayhello(){ }
定义(2):sql
@inteface Test{ int value(); //int value() default 10;//给value赋默认值10 }
使用(2):json
@Test(value=100) public void sayhello(){ }
因为value的特殊性,在使用注解时,能够省略“value=”,例如@Test(100)
若是想直接使用@Test不写值100,能够在定义注解时,设置value的默认值为100
@inteface Test{ int value() default 100;//给value赋默认值100 }
问题分析:后端
@inteface Test{ String name() default "lisi";//给name赋默认值lisi int value() default 100;//给value赋默认值100 }
(1)能够直接使用这个注解,直接写@Test
(2)保留name的默认值,改value的值(“value=”可省略)数组@Test(10)(3)保留value的默认值,改name的值(“value=”可省略)springboot
@Test(name=”张三“)(4)同时改两个值时(“value=”不能省略)restful
@Test(name=”张三“,value=10)
描述SpringBoot工程启动类的特定注解
描述SpringBoot工程测试类的特定注解
自动装配-由Spring框架为咱们指定的属性类型注入值.咱们经常使用接口类型的变量来接收spring框架注入的值(多态的思想,为了下降耦合,让程序更容易维护)
具体的注入(DI)过程:
@AutoWired Student student; 属性的类型 属性名
(1)第一:(Student为一个类)spring框架会基于属性的类型的首字母小写(student)做为key去bean池(单例)中(多例用的时候才建立)去寻找对应的value(这个value就是对象),在注入给这个属性名(注入的实际上是一个地址而并不是对象);
(2)第二:(Student为接口类型)若该实现类只有一个,则直接注入;
(3)第三:若该接口的实现类有多个,此时会根据属性名student,去查找对应的实现类建立的对象(这个对象存在map中的key为类名首字母小写),找到直接注入,找不到就直接抛异常:NoUniqueBeanDefinitionException
解决办法两种:(通常开发中都不推荐)mybatis方法1:修改bean的名字(默认是类名首字母小写);@Component (“指定的名字”),这个指定的名字必须与咱们要注入的属性名一摸同样; 方法2:修改属性名(改为某个实现类的类名首字母小写);经常使用方法就是指定用哪一个实现类!使用( @Qualifier 注解)
不明确这个类属于哪层时能够用该注解,将该类 的实 列交给spring容器建立
该注解用于描述控制层,将控制层的实例建立权限 交给spring容器
返回的是view
该注解用于描述业务层,由spring来建立@Service 描述的类的实例
该注解用于延迟对象的建立,在springboot项目中,对于 单例对象默认在项目启动时建立,这样会耗时耗资源-单例对象是要存 到bean池中的,一般配合[@Scope(singleton)]注解使用,对于 @Scope("prototype")描述的类的对象就是在须要时建立,按需加 载,故@Lazy注解对多利做用域对象不起做用
有两个取值@Scope("prototype")、 @Scope("singleton")
(单元测试的注解)
知足如下条件 (1)访问修饰符不能为private (2)返回值必须为void (3)方法参数必须时无参 (4)测试方法容许抛出异常扩展----测试的第二种方法(CommandLineRunner)
在启动类(@SpringBootApplicaton)中实现这个接口,重写 run()方法,在run()方法中写咱们测试代码;当启动类启动时会自动执行run()方法
一般用于配置类中,与@Configuration配合使用
@Bean描述的方法的返回值(返回的是一个对象)交给spring去 管理。此时能够配合@Lazy注解使用
添加在数据层的接口上,通知spring,该接口的实现类有mybatis负责实现,该实现类的对象有mybatis建立,可是交给spring管理
添加在数据层接口的实现类上,将这个类交给Spring管理
当mybatis版本相对较低时,在动态sql中想要使用方法中的参数变量来获取数据,就须要使用该注解对参数变量进行描述
也与jdk的版本有关
原理:mybatis中规范,默认条件下能够进行但值传递 后端用任意的参数接收均可以,
有时可能进行多值传递,会将多值封装为map集合进行参数的传递
旧版本时若是须要封装为单值,则必须添加param
新版本时能够自动添加@param,前提条件是多值传递
单值:数组 collection=“array”
单值:集合 collection=“list”
多值:利用@param注解封装 collection=“key”
1.描述的方法的返回值不是view(不是一个页面),
2.好比说能够是一个字符串String---直接返回该字符串
3.当方法的返回值是一个或多个pojo对象(也能够是map)时,springmvc去查看这个方法上是否有该注解,如有,就会pojo对象转成JSON格式的字符串(字符串数组)
@Controller+@ReponseBody
通常适用于ajax,不走视图解析器,而且返回json数据
当咱们的方法参数要从url中获取参数时,就须要使用该注解--restful风格中经常使用!
若是url中的名字与方法参数名不一致,还能够指定
url="menu/menulist" 1.url中的名字与方法参数名一致,能够直接加上@PathVariable,不用指定别名 @RequestMapping("{do}/{dolist}") public String domain(@PathVariable String dolist){ return dolist; } @RequestMapping("{do}/{dolist}") public String domain(@PathVariable String do){ return do; } * * * 2.url中的名字与方法参数名不一致,还能够指定,代表方法参数中的变量时来自url中的哪个 (通常不用这样的,直接写成同样就能够了(第一种)) @RequestMapping("{do}/{dolist}") public String domain(@PathVariable("dolist")String name){ return name; } @RequestMapping("{do}/{dolist}") public String domain(@PathVariable("do")String name){ return name; }
请求映射-提供映射路径-可使用在类上、方法上
该注解描述类为全局异常处理类
当Spring mvc(web)的控制层出现异常,首先会检查controller中是否有对应的异常处理方法,有则直接执行,若没有,就会检索是否有@ControllerAdvice描述的类,如有,则再去检索类中是否有对应的异常处理方法。。
该注解描述的方法,为一个异常处理的方法,注解中须要指定能处理的异常类型(RuntimException.class-字节码对象),表示该方法可以处理该类型的异常以及子类异常。 在异常处理方法中,一般须要一个异常参数,用来接收异常对象。 方法的返回值一般是一个对象(json格式-知足响应式布局),一般与@ReponseBody注解结合使用