注解¶
元注解¶
- @Target:注解的作用目标
- TYPE:允许被修饰的注解作用在类、接口和枚举上
- FIELD:允许作用在属性字段上
- METHOD:允许作用在方法上
- PARAMETER:允许作用在方法参数上
- CONSTRUCTOR:允许作用在构造器上
- @Retention:注解的生命周期
- @Documented:注解是否应当被包含在 JavaDoc 文档中
- @Inherited:是否允许子类继承该注解
内置注解¶
- @Override
- @Deprecated
- @SuppressWarnings
注解与反射¶
当通过反射( getAnnotation 方法)去获取一个注解类实例的时候, JDK 是通过动态代理机制生成一个实现注解(接口)的代理类:public final class $Proxy1 implements Hello{},代理类实现接口 Hello 并重写其所有方法,包括 value 方法以及接口 Hello 从 Annotation 接口继承而来的方法。。
AnnotationInvocationHandler 是 JAVA 中专门用于处理注解的 Handler。invoke 函数将注解的属性值key-value保存在map中。这样就可以在程序运行时(注解设置为运行时可见)通过反射获取到注解的配置信息。
Spring 注解¶
组件类注解¶
- @Component :标准一个普通的spring Bean类。可以细分为:
- @Repository:标注一个DAO组件类。
- @Service:标注一个业务逻辑组件类。
- @Controller:标注一个控制器组件类。
装配注解¶
- @Autowired:用于为类的属性、构造器、方法进行注值。默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合**@Qualifier**注解进行限定,指定注入的bean名称。
- 先获取给定类型的所有bean名称,循环所有的beanName,获取它的实例。
- 再通过isTypeMatch方法来确定是否匹配。
- 将所有符合类型的放入map。
- 如果查找的Bean实例大于1个,通过matchesBeanName方法来确定bean集合中的名称是否与属性的名称相同,找到最合适的那个。
- 还确定不了就通过优先级别Primary和Priority注解来确定
常用注解¶
- @Configuration:类可以被 Spring 的 IoC 容器所使用,作为 bean 定义的资源。
事务注解¶
- @Transactional
SpringMVC注解¶
- @Controller:表明该类会作为与前端作交互的控制层组件,通过服务接口定义的提供访问应用程序的一种行为,解释用户的输入,将其转换成一个模型然后将视图呈献给用户。
- @RequestMapping:将url映射到整个处理类或者特定的处理请求的方法。
- @RequestParam :将请求的参数绑定到方法中的参数上
- @PathVariable : 该注解用于方法修饰方法参数,会将修饰的方法参数变为可供使用的uri变量(可用于动态绑定)。
- @RequestBody:将方法参数绑定到HTTP请求Body上。
- @ResponseBody : 将返回类型直接输入到HTTP response body中。(输出JSON格式的数据)