autowire注解需要加修饰符吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了autowire注解需要加修饰符吗相关的知识,希望对你有一定的参考价值。
Autowired表示一个属性是否需要进行依赖注入,可以使用在属性、普通方法上、构造方法上。注解中的required属性默认是true,如果没有对象可以注入到属性,则会报出异常;@Autowired加在某个属性上,spring会从ioc容器中找到bean对象注入到属性上,如果找到多个该类型的Bean对象,则再根据属性的名字从多个Bean对象中确认一个;
@Autowired写在set()方法上,在spring会根据方法的参数类型从ioc容器中找到该类型的Bean对象注入到方法的行参中,并且自动反射调用该方法(被@Autowired修饰的方法一定会执行),所以一般使用在set方法中、普通方法不用;
@Autowired使用在构造方法中:根据构造方法的形参、形参名,从ioc容器中找到该类型的Bean对象,注入到构造方法的形参中,并且执行该方法;
@Autowired注解在进行依赖注入的时候需要指定bean的时候,和@Qualifier注解一起使用使用@qualifier注解指定名称
?
//构造方法
@Autowired
public Bean03(Bean04 bean04)
System.out.println("11111111111111");
//属性上
@Autowired
Bean04 bean04;
//set方法
@Autowired
public void setBean04(Bean04 bean)
this.bean04 = bean;
//普通方法
@Autowired
public void commonMethod(Bean04 bean04)
System.out.println("普通方法的执行");
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Autowired使用在构造方法上的细节
在同一个类上有多个构造方法上使用了@Autowired,默认情况下会报错;
解决方法:可以把@Autowired的属性required设置成为false,此时spring会自己选择使用哪一种构造方法;
spring在上述情况下的选择规则:
1.会优先考虑参数多的
(先ByType找到多个该类型的bean,再ByName进行注入)
2.如果多个类型的bean按照ByName无法注入,则去考虑参数少的进行注入,依次类推;
3.在参数个数相同、ByName,也可以注入的情况下,按照构造方法的书写顺序进行选择;
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
阿里p7互联网架构师全套视频资料
微信名片
打开CSDN APP,看更多技术内容
autowired 静态方法使用_关于springboot工具类中@Autowired注入bean...
springboot +mybatis 在工具类的静态方法中,需要使用mapper(其他bean也一样),所以最开始直接使用@Autowired进行了注入,代码如下: @Autowiredprivate staticMt4UsersMapper mt4UsersMapper; @Autowiredprivate staticUserBankAccountsMapper userBa...
继续访问
@Autowired的原理简识
@Autowired注解是属于spring的容器配置的一个注解
继续访问
解决@Autowired注入的对象被static静态修饰的方法引用
第一种方法: public class TreeUtil @Autowired IAreaApi AutowiredAreaApi; private static IAreaApi areaApi; @PostConstruct public void init() areaApi = this.AutowiredAreaApi; 第二种方法: @Component public class Test
继续访问
最新发布 Spring 中 @Autowired 修饰构造方法时注意事项
1、当有且仅有1个构造方法时,Spring 都只会使用这个构造方法创建实例。2、Spring 优先选择 被 @Autowired 标注的构造方法3、当有多个构造方法同时存在时,Spring 默认选择空构造方法,若此时没有空构造方法,就会报错。4、当有多个方法同时存在时,想指定 Spring 具体用哪个构造方法,可以加上 @Autowired 注解来标识,如果此时有多个 @Autowired 同时存在,需要将所有的 required 修改成 false ,Spring 默认使用参数最多的构造方法。
继续访问
在Static方法中引用被@AutoWired修饰的属性,无法注入,报空指针异常java.lang.NullPointerException 、SpringBoot + Mybatis
场景:在Static方法中引用被@AutoWired修饰的属性,无法注入,报空指针异常 问题:SpringBoot + Mybatis连接数据库Bean不能注入报空指针异常 在保存到数据库时出现空指针异常 原因: 因为静态无法注入,通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序: Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法) 解决: 网上咨询了比较
继续访问
Spring自动装配@Autowired的三种方式
转自:https://ahaochan.github.io/Java/JavaWeb/Spring/Spring%E8%87%AA%E5%8A%A8%E8%A3%85%E9%85%8D@Autowired%E7%9A%84%E4%B8%89%E7%A7%8D%E6%96%B9%E5%BC%8F.html 前言 在IDEA升级2017版后,发现以前使用的@Autowired出现了个警告F
继续访问
spring中@Autowired用法
- @Autowired可自动装配javaBean - @Autowired默认按类型装配,此时必须有且只有一个符合条件的 - 当有多个同一类型时,@Autowired切换成按名称装配 - @Autowired和@Qualifier 联用可指定注入类 - @Resource等价于@Autowired和@Qualifier 联用的效果
继续访问
@Autowired作用在普通方法上
@Autowired作用在普通方法上,会在注入的时候调用一次该方法,如果方法中有实体参数,会对方法里面的参数进行装配,并调用一次该方法。这个可以用来在自动注入的时候做一些初始化操作。 ...
继续访问
热门推荐 @Autowired注解详解
一、在构造函数上定义 关于在构造方法上加@Autowired注解,讲下面几点: 1.带有@Autowired注解(属性required默认为true)的构造方法,在Spring初始化对象实例时,会调用此构造函数,进行对象的实例化。 2.如果构造方法上带有了@Autowired注解,那么这个构造方法不是public修饰的,也可以被实例化。private修饰的,也可以被实例化出来。 3.当一个对象只有一个构造方法时,Spring实例化对象会默认选择这个构造方法进行实例化,无需加@Autowired注解。只有当多
继续访问
@autowired注解的作用_Java Spring注解三:@Bean和@Autowired,Java的新基建和新动能
最近一个同事问我一句“@Bean和@Autowired有啥区别?”,我当时有点惊讶,中午午休好好吃饭,怎么想起问这个?原来是他一个同学求职面试问到这个,现在问他该怎么回答。我当时回答是:“这个@Bean的注解就是替代我们之前配置spring的XML文件里面的<bean>的,毕竟按照配置文件的方式,在Java文件上用写代码写个bean,然后再去XML文件通过<bean>注册,...
继续访问
@autowired、@autowired(required = false)注解放在方法上的作用详解
@autowired 用于测试的实体类User,并将这个类注入到Spring容器中,为@autowired注解放在方法做前提工作 @Component public class User private String name = "张三"; public String getName() return name; public void setName(String name) this.name = name;
继续访问
方法上加上@Autowired注解
现在有如下的一段代码: /** * 解决写入redis缓存时key乱码问题 * @param redisTemplate */ @Autowired(required = false) public void setRedisTemplate(RedisTemplate redisTemplate) RedisSerializer stringSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializ
继续访问
在Static方法中引用被@AutoWired修饰的属性
在工具类中需要在Static方法中引用被@AutoWired修饰的属性,被@AutoWired修饰的属性是null; @Component public class ShowInstanceUtil @Autowired private IDataDictWebService DictService; private static IDataDictWebService dat...
继续访问
@Autowired注解作用在方法上
@Autowired注解作用在方法上 @Autowired注解作用在方法上 (1)该方法如果有参数,会使用autowired的方式在容器中查找是否有该参数 (2)会执行该方法
继续访问
Spring注解@Autowired
(1)、带有@Autowired注解的构造方法,在Spring初始化对象实例时,会被调用进行对象的实例化。(2)、如果构造方法上带有了@Autowired注解,那么这个构造方法就算不是public修饰的也可以被实例化。(3)、当一个对象只有一个构造方法时,Spring实例化对象会默认选择这个构造方法进行实例化,无需加@Autowired注解。只有存在了多个构造方法时,才用加@Autowired注解,告诉Spring选择那个构造方法进行实例化。
继续访问
使用@Autowired注解完成属性依赖注入时,写在属性上与写在set方法上的区别
@Autowired 注解可以对成员变量、构造方法、方法进行标注,来完成自动装配工作;放在成员变量上,也可以放在成员变量的set()方法上,也可以放在任意方法上表示自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。 需要明确的是:@Autowired 是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使...
继续访问
Spring系列之自动注入(autowire)详解
本文内容 手动注入的不足 Class.isAssignableFrom方法介绍 3种自动注入方式详解及案例 按名称自动注入 按类型自动注入 按构造器进行自动注入 按类型自动注入某种类型的所有bean给List和Map(重点) autowire=default介绍 总结 案例源码 手动注入的不足 上篇文章中介绍了依赖注入中的手动注入,所谓手动注入是指在xml中采用硬编码的方式来配置注入的对象,比如通过构造器注
继续访问
Java面试基础篇
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。Java的强引用、弱引用、软引用、虚引用。Java语言基础常识。Java12新特性。JavaIO详解。...
继续访问
Java实现Autowired自动注入
首发于Enaium的个人博客 继续使用上个文章的类容器 创建一个注解 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Autowired 遍历所有字段包括私有的 private void autowired() for (Map.Entry<Class<?>, Object> classObjectEntry : classes.entry
继续访问
spring——autowire自动注入
通过指定bean标签上的autowire属性可对bean对象进行自动注入 autowire = byName 根据名称注入 autowire = byType 根据类型注入 当有多个bean与属性对应时会出错 <bean id="dept" 参考技术A autowire注解需要加修饰符,spring项目中我们经常使用到spring的一个注解@Autowired,这个注解是用于实现spring的特性,IOC(Inversion of Control)控制反转和DI依赖注入,spring将项目中的实体进行集中管理,然后通过@Autowired注解作为标识,以自动注入的方式来给实体注入属性,这些操作都是基于java反射机制来实现的。 参考技术B 不需要加修饰符,Autowire注解只能修饰属性,不能修饰方法
Java 各级注解及@Autowired注入为null解决办法
1、@controller 控制器
- 用于标注控制层,相当于struts中的action层。
2、@service 服务层
- 用于标注服务层,主要用来进行业务的逻辑处理。
3、@repository DAO层(Repo层)
- 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件。
4、@Autowired 注入实例
- 表示被修饰的类需要注入对象,spring会扫描所有被@Autowired标注的类,然后根据 类型 在ioc容器中找到匹配的类注入。
5、@Component (把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>
) - 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
相对于@Autowired和@Component注解,个人理解实际用法为:
如在普通类中用到需@Autowired注入实例,则需将普通类使用@Component注解标明,不然使用@Autowired注入的实例为null。
一般普通类实例直接new即可,而在有上述两个注解的普通类在实例时需要使用@Autowired注入,如果直接使用new实例,则该类中使用@Autowired注入的实例为null。
实例如下:
在ExcelUtil工具类中需要使用@Autowired注入需用到的实例,则改工具类需用@Component注解标明,在使用该工具类时需要用@Autowired注入实例,如果使用ExcelUtil excelUtil = new ExcelUtil(); new实例,则工具类中注入的实例modelPropdictRepo为null。
以上是关于autowire注解需要加修饰符吗的主要内容,如果未能解决你的问题,请参考以下文章
可以为属性的 get 和 set 访问器指定单独的访问修饰符吗?