【Java】@AllArgsConstructor、@Value、@Component共用存在的问题及No qualifying bean of type ‘java.lang.Integer‘

  • Post author:
  • Post category:java


今天碰到了三者共同使用,产生了一系列问题,下面将进行错误复原和分析,避免大家踩坑。


复习


Spring实例化bean有四种方式

1.无参构造方法实例化(Spring默认,常用,需要bean类中存在无参构造方法);

2.静态工厂实例化

3.实例化工厂实例化

4.注解方式实例化

spring依赖注入的三种方式

1.使用setter方法

2.使用有参构造器

3.使用注解@Bean、@Autowired



1.项目准备

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


项目结果:


在这里插入图片描述


问题1:


ViewServiceImpl类更改为

在这里插入图片描述

结果:

在这里插入图片描述


问题2:


ViewServiceImpl类更改为

在这里插入图片描述

结果出现错误

java.lang.IllegalStateException: Failed to load ApplicationContext(java.lang.IllegalStateException:无法加载 ApplicationContext)。

No qualifying bean of type ‘java.lang.Integer’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}(没有可用的“java.lang.Integer”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{})


解决方法1:不可行


在这里插入图片描述

改为

在这里插入图片描述

但是也会出现上述错误。


解决方法2:可行


ViewServiceImpl类更改为

在这里插入图片描述

结果

在这里插入图片描述


解决方法3:可行


在这里插入图片描述

或者

在这里插入图片描述

上述对testService字段的修改,完全也可以加上@Autowired标签

结果与上述相同。

注意不可对filed字段进行上述的修改,否者还会出现上述bean注入错误信息。


解决方法4:可行,推荐,项目中经常使用


在这里插入图片描述

结果正确。



学习



@Value注入外部属性的三种方式

  1. 注入普通属性

    在这里插入图片描述

2.注入配置文件

可以通过@Value(“${}”)来注入配置文件里面的信息

在这里插入图片描述

3. 注入表达式并运算

在这里插入图片描述


构造器注解解释

@AllArgsConstructor  注解在类上,为类提供一个全参的构造方法
@NoArgsConstructor   注解在类上,为类提供一个无参的构造方法。
@RequiredArgsConstructor 注解在类上,会生成构造方法(可能带参数也可能不带参数)。
注意:@RequiredArgsConstructor如果带参数,这参数只能是以 final 修饰的未经初始化的字段或者是以 @NonNull 注解的未经初始化的字段


注意:

每个类默认有个无参构造方法,但是重载了其默认的构造方法。重载之后 默认的构造方法就会被覆盖。



版权声明:本文为qq_44461217原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。