当前位置:网站首页>@Autowired详解[email protected]在static属性上的使用
@Autowired详解[email protected]在static属性上的使用
2022-08-02 03:18:00 【bsegebr】
@Autowired注解可以对成员变量、方法以及构造函数进行注解
一、@Autowired作用在成员变量上
Spring自动为该成员变量在容器中赋值对应的bean对象
但是要注意@Autowired不可以作用在静态成员变量上
Java中变量初始化顺序为:
静态变量或静态语句块(按声明顺序)–> 非静态变量或构造代码块(按声明顺序)–> 构造方法 –> @Value/@Autowired等
且非静态变量等后三种都是在创建或bean注入的时候才会进行
如果想要为静态成员变量自动赋值,可以使用@Autowired作用在set方法上来进行注入
private static UserDataService userDataService;
private static UserServiceImpl userService;
@Autowired
public void setUserDataService(UserDataService userDataService) {
WebSocketServer.userDataService = userDataService;
}
@Autowired
public void setUserService(UserServiceImpl userService) {
WebSocketServer.userService = userService;
}
二、@Autowired作用在普通方法上
@Autowired作用在普通方法上,会在注入该类的时候调用一次该方法
如果方法中有实体参数,会对方法里面的参数进行装配,并调用一次该方法。这个可以用来在自动注入的时候做一些初始化操作。
Person在容器中有实例对象,User没有,最终执行结果为:
@autowired(required = false)作用在方法上,当方法有参数时,如果IOC容器中有方法参数的对象,那么会自动注入并执行方法一次;如果IOC容器中没有方法的参数对象,那么这个方法不会被执行,不管这个方法上有多少个参数,只要有一个参数对象是IOC容器中没有的,这个方法便不会被执行。如果方法没有参数,那么会被执行一次。
三、@Autowired作用在构造函数上
①作用1:通过属性给属性赋值
错误写法:因为java变量赋值顺序是先构造函数,然后@Autowired,所以无法使用person来给dog进行赋值
@Autowired
private Person person;
private String dog;
public ServiceImpl(Person person){
this.dog= person.getdog();
}
正确写法:
在构造函数中使用@Autowired,并将person作为参数,自动注入
private Person person;
private String dog;
@Autowired
public ServiceImpl(Person person){
this.person= person;
this.dog= person.getdog();
}
②定义创建bean时调用的构造函数
当一个类中有多个构造方法,且我们要选择某一个构造方法进行Spring实例化时,可以在构造方法上加@Autowired注解
带有@Autowired注解(属性required默认为true)的构造方法,在Spring初始化对象实例时,会调用此构造函数,进行对象的实例化。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
「PHP基础知识」空值(null)的使用
HCIP第十一天_MPLS实验
Daily practice------There are n integers, so that the previous numbers are moved back m positions in order, and the last m numbers become the first m numbers
MySQL8 - use under Windows package installation method
Mysql8创建用户以及赋权操作
MySQL中的存储过程(详细篇)
MySQL常见的索引
bgp机房的动态路由和静态路由的区别
黑马案例--实现 clock 时钟的web服务器
删库后!除了跑路还能干什么?
随机推荐
网站与服务器维护怎么做?
Heao Technology Network Interview (with reference answers)
RHCSA第二天
什么是轮式里程计
一个资深测试工程师面试一来就问我这些题目
R16 Type II量化反馈码本的产生
Double Strings (don't always forget substr)
输入延迟切换系统的预测镇定控制
C语言力扣第47题全排列 II。搜索回溯
Redis的集群模式
JSP WebSehll backdoor script
支付通道对接常见的问题有哪些?
py0_二十一天计划书
嘉为蓝鲸携手东风集团、上汽零束再获信通院四项大奖
离线数仓-用户行为采集
2022.7.30 js笔记 运算符和流程控制符、循环
MySQL中的存储过程(详细篇)
小程序(开发必备常识)1
MySQL分组后排序
Foundry教程:使用多种方式编写可升级的智能代理合约(下)