Java5.0以后引入了注解的概念
注解只在源码阶段保留(编译时忽略),不会影响程序内部的东西,决定运行级别 是一个标识
定义一个注解就可以在其他类中使用
1.元注解:注解上面的注解
(1)@ Retention(...)
(2)@Documented
(3).@Target------注解运行的地方(构造函数/属性/方法上)
(4).@Inherited
(5)@Repeatable(...) 可多次重复使用--可以将多个值重复赋给容器
注解的属性:也叫成员变量,注解只有成员变量,没有方法。
注解的成员变量在注解中以“无形参的方法”形式来声明,其方法名定义该成员变量的名字,其返回值定义了该成员变量的类型;
给注解的属性赋值:
(当一个注解(RunAnnotation2)没有属性---它只是一个标识 ()可以省略)
Java预用(本来就有)注解:
@Deprecated:过时的方法或者类(还可以用 只是有了更好的升级)
@Override:方法重载
@SuppressWarnings(“要忽略的内容”):阻止警告
@SafeVarargs:参数安全类型
@FunctionalInterface:函数式接口注解
注解与反射:
注解通过反射获取(通过反射获取注解信息), 通过类 方法名名字获取
mvc在运行时在handlemapping会读你的注解 拿到你的注解的值 拼成一个请求发送到DispaterServlet或者controller
自定义注解:可以定义一个static 方法获取注解,,然后控制程序的走向
package com.spring.annotation;
@TestAnnotation(id="666",message = "wxx")
public class Test {
//只有当id=666时才访问到这个方法
private void test(){
System.out.println("test run");
}
public void runTest()
{
//获取类的注解
TestAnnotation t=this.getClass().getAnnotation(TestAnnotation.class);
if(t.id().equals("666"))
{
this.test();
}
}
}
只要实例化对象就判断是否加了该注解????
使用注解--- 反射原理(需要把注解加到多个类或者多个方法)判断逻辑
自动注入:成员变量上
@Autowired:自动注入 默认ByType (包/接口的实现类)找,如果找到有多个bean 再按ByName查找
(用你注入的类型去匹配你定义的bean 当匹配到多个时 根据 唯一的name再进行匹配 多个则异常)
@Qualifier("name"):名字注入
@Resource:成员变量
@Singleton:单例类
@RequestBody:可以放协议上的内容
@RequestParam:获取参数
@RequestMapping:请求映射
@ResponseBody:返回字符串 去掉后返回原先视图指定的页面
@Controller:声明控制器 控制层
@Service:service层
@Repository:相当于定义成bean 注入时便于分层
@Component:分层
ps:spring 的注解很强大,其应用机制主要就是反射原理 通过获取对象做判断逻辑;