8.2.7 Spring5新增的注解
在使用@Autowired
注解执行自动装配时,该注解可指定一个required
属性,该required
属性默认为true
这意味着该注解修饰的Field
或setter
方法必须被依赖注入,否则Spring
会在初始化容器时报错。
@Autowired注解自动装配与XML中autowire=”byType”自动装配的区别
@Autowired
与在XML
中指定autowire="byType"
的自动装配存在区别:
autowire="byType
的自动装配如果找不到自动装配的候选Bean
, 则Spring
容器只是不执行注入,并不报错;- 而
@Autowired
的自动装配如果找不到自动装配的候选Bean
,Spring
容器会直接报错
如何让@Autowired自动装配在找不到候选Bean是不报错
为了让@Autowired
的自动装配找不到候选Bean
时不报错(只是不执行依赖注入),现在有两种解决方式:
- 将
@Autowired
的required
属性指定为false
- 使用
Spring5
新增的@Nullable
注解。
程序示例
1 | E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\Nullable |
如下代码示范了这两种方式:
1 |
|
上面程序同时使用了两种方式来指定setGunDog()
方法找不到被装配的Bean
时不报错,实际上只需要使用其中之一即可。也就是说,如果给@Autowired
指定了required=false
属性,就可以不使用@Nullable
注解;如果使用@Nullable
注解,就可以不给@Autowired
指定了required=false
属性;
Spring5其他新注解
此外, Spring5
还引入了如下新的注解。
注解 | 描述 |
---|---|
@NonNull |
该注解主要用于修饰参数 、返回值和Field ,声明它们不允许为null |
@NonNullApi |
该注解用于修饰包 ,表明该包内API 的参数、返回值都不应该为null 。如果希望该包内某些参数、返回值可以为null 则需要使用@Nullable 修饰它们。 |
@NonNullFields |
该注解也用于修饰包 ,表明该包内的Field 都不应该为null 如果希望该包内某些Field 可以为null ,则需要使用@Nullable 修饰它们。 |
## 这三个NonNullxxx注解的区别 ## | |
从上面介绍不难看出,这三个注解的功能基本相似,区别只是作用范围不同: | |
- @NonNull 每次只能影响被修饰的参数 、返回值 和Field ; |
|
- @NonNullApi 、@NonNullFields 则会对整个包 起作用。其中, |
|
- @NonNullApi 的作用范围是包内所有参数+返回值 ; |
|
- @NonNullFields 的作用范围是包内所有Field 。 |
原文链接: 8.2.7 Spring5新增的注解