常用注解
@Controller:
用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作。
@Service:
将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了,类似的还包括@Component、@Repository、@Controller。
@Component:
用在mapping层 把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
@RequestMapping:
用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@Repository:
@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
@Resource:
当service需要使用spring创建的userDao实例时:@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。
@Autowired:
可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired是根据类型进行自动装配的。
@ReponseBody:
将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据;在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@Service用来标注业务层组件
@Controller用来标注控制层组件
@Repository用来标注Dao层组件,即数据访问层组件
@Component 泛指组件 当不好归类的时候 用这个做标注
@RequestParam:
后台获取参数的方式:request.getParameter("参数名")
通过注解获得
此注解使用方式:
- 参数和名字一致:@RequestParam String lid 如果注入时找不到lid这个名字 不会注入
- 参数和名字不一致:@RequestParam(name="lid") String id 提前指定name 后面的可以不一致
- 使用默认值: @RequestParam(name="lid",defaultValue="new") 设置默认的其他值 这样就会把前端传来的值覆盖
- 注意事项:当你使用基本数据类型而非包装类型时
@RequestParam(name="lid") int id 这个时候required=false的话就会出错 因为前端不传值的话 就为null 这样肯定会报错的
所以应该指定required = true 也可以不指定 因为它源代码中默认的就是true
元注解:
1.@Target,
描述注解使用的范围:具体的类型在jdk枚举类ElementType中
主要包括:packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量
2.@Retention,
描述注解的生命周期,包括:SOURCE CLASS RUNTIME
3.@Documented,
默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理
javadoc用于根据注释生成api文档
4.@Inherited:参考 https://blog.csdn.net/HaHa_Sir/article/details/80753976
即在两个类之间存在继承关系,且父类标记的注解使用了 @Inherited 注解
这样在子类反射获取注解的时候 也可以获取到父类的注解 但是反射父类不能获取到子类的注解
如果去除@Inherited注解 则子类反射也不能获取父类的注解
@SuppressWarnings(value = "unchecked")
@SuppressWarnings(value = {"unchecked","rawtype"})
@SuppressWarnings(value = "all")
@RequestBody和@RequestParam注解:
前者:接收前端传递给后端的json字符串中的数据的(请求体中的数据的);
而且使用时前端不能使用GET请求 因为其无请求体body 而应该使用POST请求
一个请求只能一个@RequestBody @RequestParam可以很多个。 而且两者可以组合使用
RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数
前者对应postman里的 from raw application/json后者对应 from data
不写注解默认使用的是@RequestParam 即默认key-value的形式
@EqualsAndHashCode(callsuper = false)
默认是false 但如果不写 这个注解会有警示信息 在用了@Data注解时候会出现
意思就是子类 equal和hashcode 生成的时候 不去考虑继承的父类的字段