1.注解是什么
JDK5.0新增 --- 注解(Annotation),也叫元数据。与类、接口、枚举是在同一个层次,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
2.注解的作用
不是程序本身,可以对程序作出解释,可以被其他程序读取(比如:编译器等)
注解还可以添加一些参数名 例如:@SuppressWarnings(value="unchecked")
格式:@+注解名
3.注解的由来
在注释之前(甚至之后),XML被广泛用于框架的配置,开发人员和架构师认为XML维护变得越来越麻烦。 他们想要某些东西可以与代码紧密耦合而不是XML,而XML与代码之间的耦合非常松散(在某些情况下,几乎是分开的)。
如果搜索“ XML与注释”,会发现很多有趣的争论。 有趣的一点是,引入了XML配置可以将配置与代码分开。 注解可以提供更大的便捷性,易于维护修改,但耦合度高,而 XML 相对于注解则是相反的。如今,大多数框架都将XML和注解结合使用,以充分利用两者的积极方面。
4.注解的分类(注解可以根据注解参数分为三大类)
标记注解: 没有参数的注解,仅用自身的存在与否为程序提供信息,如@Override注解,该注解没有参数,用于表示当前方法为重写方法。
代码:
@Target({TYPE,CONSTRUCTOR,METHOD})
public @interface MyAnnotation4 {
}
单值注解: 只有一个参数的注解,如果该参数的名字为value,那么可以省略参数名,如 @SuppressWarnings(value = “all”),可以简写为@SuppressWarnings(“all”)。
完整注解: 有多个参数的注解。
5、JDK内置的注解
@Override 定义在java.lang.Override中,只用于修辞方法,表示一个方法声明打算重写一个超类中的另一个方法声明
@Deprecated 添加此注解表示改方法不推荐使用,但可以使用
@SuppressWarnings:抑制编译时的警告信息
6、元注解
元注解作用:负责注释其他注解
元注解有四个:
@Retention 用于描述注解的使用范围,应用到一个注解上的时候,解释说明了这个注解的的存活时间。
RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们
元注解实例代码:
@Target 表示需要在什么级别保存该注解信息,用于描述注解的生命周期(source<class<runtime)
source:源代码
runtime:运行时
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
@Document 这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去
@Inherited
@Inherited 是继承的意思,但是它并不是说注解本身可以继承,
而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,
那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
说的比较抽象。代码来解释。
代码:
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface Test {}
@Test
public class A {}
public class B extends A {}
@Repeatable JDK1.8引入
Repeatable 自然是可重复的意思
代码:
@interface Persons {
Person[] value();
}
@Repeatable(Persons.class)
@interface Person{
String role default "";
}
@Person(role="artist")
@Person(role="coder")
@Person(role="PM")
public class SuperMan{
}
除了以上这四(五个--》JDK1.8之后添加了一个)个,所有的其他注解全部都是自定义注解。
目录
1.注解是什么
2.注解的作用
3.注解的由来
4.注解的分类(注解可以根据注解参数分为三大类)
5、JDK内置的注解
6、元注解
8、注解的应用场景
9、Spring注释总结
在javaWeb中,Selvert开发有两种方式,一种是web配置,另一种是注解式开发
在spring框架就是一个典型的注解式开发
9、Spring注释总结
@Configuration 标识当前类是配置类
@ComponentScan 包扫描注解 扫描注解
@Bean 标识该方法的返回值交给Spring容器管理
@Scope 控制单例和多例
@Lazy 懒加载
@PostConstruct 初始化方法
@PreDestroy 销毁方法
@Component 将当前类未来的对象交给容器管理
@Autowired 按照类型进行注入
@Qualifier 按照名称进行注入
@Repository 标识持久层注解
@Service 标识Service层
@Controller 标识Controller层
@Value 为属性赋值
@PropertySource 加载指定路径下的配置文件
@Aspect 标识当前类是一个切面类
@Pointcut 用于定义切入点表达式 表达式写法4种
@EnableAspectJAutoProxy 让AOP的注解有效果
@Before AOP-前置通知
@AfterReturning AOP-后置通知
@AfterThrowing AOP-异常通知
@After AOP-最终通知
@Around AOP-环绕通知
@Order(1) //可以利用order关键字 实现AOP的排序 数字越小越先执行
@ResponseBody 将返回的数据转化为JSON串, 如果是字符串本身 原数据返回
@RequestMapping("/hello") 实现浏览器的请求路径与方法的映射
@PathVariable restFul结构,接收参数的注解
@GetMapping("") 只能接收GET请求类型
@DeleteMapping("") 只能接收DELETE请求类型
@PostMapping("") 只能接收POST请求类型
@PutMapping("") 只能接收PUT请求类型
@RestController 表示Controller类,同时要求返回值为JSON
@CrossOrigin 允许跨域访问
@RequestMapping 将公共的部分抽取
@Data lombok动态生成get/set/toString/equals/hashcode等方法
@Accessors(chain = true) 开启链式加载
@NoArgsConstructor 生成无参构造方法
@AllArgsConstructor 生成全参构造方法
@Mapper mybatis将当前的接口交给Spring容器管理. Map<类名小写,JDK动态代理对象>
@SpringBootTest 该注解的作用在进行代码测试时启动spring容器,之后动态的获取对象 注意包路径 主启动类的同包及子包中
@Param 将参数封装为Map集合
@Alisa 设置别名
@MapperScan Mybatis中扫描指定包路径的接口 为其创建代理对象.
@Insert Mybatis 新增操作注解
@Update Mybatis 修改操作注解
@Delete Mybatis 删除操作注解
@Select Mybatis 查询操作注解
@Transactional Spring中用来控制事务
@RestControllerAdvice Controller层的全局异常处理
@ExceptionHandler 按照某种异常类型进行拦截