记录一些 spring 注解 Autowired Qualifier Resource

官网文档: https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-annotation-config

参考: 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.csdn.net/m0_43448868/article/details/111643397

@ComponentScan(basePackages = "com.acme") 扫描指定包下的类,  includeFilters和excludeFilters里的  @Filter可以定义扫描规则

@Profile 标示哪些配置文件是激活的

@Import   导入某一个实现ImportSelector接口的类, spring的很多 @EnableXxx注解都有该写法  https://blog.csdn.net/u011320740/article/details/105094866

ImportSelector,DeferredImportSelector的区别    https://blog.csdn.net/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.csdn.net/hehe520347/article/details/80090916
@CookieValue 取cookie中值
@RequestPart 接收moltipart文件上传, 同时还能接收json格式的参数, RequestParam默认是表单格式的并不支持json

 

@Validated与@Valid的区别(JSR-303方法文档使用说明) https://blog.csdn.net/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:可以用在方法、构造函数、方法参数和成员属性(字段)上; 支持嵌套验证(不支持分组)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值