参考: https://www.cnblogs.com/fengli9998/p/7472247.html
常用注解一般写在成员属性上, 或写在setter方法上, 构造方法上
@Autowired 是根据类型注入, 默认类必须存在(required = false 可以取消必填), 当1个接口有多个实现类时会报错, 此时可以通过@Primary指定哪个类是主要的, 也可以通过搭配@Qualifier来区分注入, 以及接口泛型注入
@Qualifier 在1个接口有多个实现类时, 定义bean时, 添加name, 用时可区分是哪个bean; 也可以在自定义注解上使用,简化使用
@Bean 生成由Spring容器管理的bean, 比如: 有个第三方jar, 因为没办法修改源码, 但希望把其中的bean类交给spring管理时, 就可以用该注解
@Component(@Controller、@Service、@Repository)通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。@RestController在Spring MVC中的注释由@Controller和 组成@ResponseBody
@Required set方法的入参类一定被装载, 已过时
@Lazy 懒加载
@Value 用于加载配置文件中的配置 如: @Value({配置文件key:默认值}) @Value({page.size:10}), 支持SpEl表达式https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#expressions
@PropertySource 通过指定前缀, 加载配置文件中多个配置的值, 并封装到一个对象里, @PropertySource("classpath:/com/${my.placeholder:default/path}/app.properties")
@Configuration 表示是一个配置类组件
@Scope("singleton") 设置作用域, proxyMode枚举告诉IoC容器要不要为Bean创建代理,如何创建代理,是使用JDK的动态代理还是使用CGLIB https://blog.youkuaiyun.com/m0_43448868/article/details/111643397
@ComponentScan(basePackages = "com.acme") 扫描指定包下的类, includeFilters和excludeFilters里的 @Filter可以定义扫描规则
@Profile 标示哪些配置文件是激活的
@Import 导入某一个实现ImportSelector接口的类, spring的很多 @EnableXxx注解都有该写法 https://blog.youkuaiyun.com/u011320740/article/details/105094866
ImportSelector,DeferredImportSelector的区别 https://blog.youkuaiyun.com/yzqingqing/article/details/88537333
JSR-250规范注解
@Resource 可以指定name或者type, 制定名称类型时找不到会报错; 什么都不写默认是通过name注入, 找不到则根据类型注入
@PostConstruct 构造后执行
@PreDestroy 销毁前执行
JSR-330规范:
@Inject 按类型装配,功能比@Autowired少,没有必填属性。
@Named,@ManagedBean 作用与Component相同
参数绑定: spring-web:web.bind.annotation.*
使用@RequestMapping时, 必须设定RequestMethod类型,不然容易导致传参混乱
springmvc 参数接收, get默认能绑定到入参dto对象上, Post默认content-type是表单application/x-www-form-urlencoded
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(@Validated UserDto dto) {
return "success";
}
@RequestParam 支持的是表单形式的传参, header中的param传参; 默认参数是必填, 单个参数, 对象参数则不用写该注解
@RequestBody 接收json形式的传参; 和@RequestParam同时使用不会报错, 但不推荐这种写法
@RequestAttribute 获取属性从1.@ModelAttribute预存参数, 2.HandlerInterceptor预存参数, 3.转发请求中获取,非必填, ;
4.3才有, spring的思想是屏蔽原生servlet的api, 类似ServletRequest.getAttribute()
https://cloud.tencent.com/developer/article/1497736
@ModelAttribute 用于将方法的参数或方法的返回值绑定到指定的模型属性上,并返回给Web视图(视图名是类似user.jsp页面中的 "user"部分);
作用域request https://www.cnblogs.com/yg_zhang/p/4308271.html
@SessionAttributes 作用域为session
@JsonAlias json别名转换, 需要get,set方法
@JsonProperty json转换key重定义
@Requestparam原理 http://www.likecs.com/show-62899.html
@InitBinder 绑定参数前缀区分相同name的入参对象,类型转换,排除某个字段绑定 https://blog.youkuaiyun.com/hehe520347/article/details/80090916
@CookieValue 取cookie中值
@RequestPart 接收moltipart文件上传, 同时还能接收json格式的参数, RequestParam默认是表单格式的并不支持json
@Validated与@Valid的区别(JSR-303方法文档使用说明) https://blog.youkuaiyun.com/weixin_42040802/article/details/84763713
基本验证功能上没有太多区别。但是在分组、注解地方、嵌套验证等功能上两个有所不同
规范: JSR380官方文档 https://beanvalidation.org/2.0-jsr380/spec/#changelog
实现: hibernate-validator https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single
@Validated:可以用在类、方法和方法参数上。(Spring's JSR-303, 标准JSR-303的一个变种); 支持分组(不支持嵌套验证, 但可以搭配@Valid实现)
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上; 支持嵌套验证(不支持分组)