8.2.7 Spring5新增的注解
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。