今天在学习SpringSecurity时,遇到了下面的问题:
默认@Autowired(required=true),表示注入的时候bean必须存在,否则注入失败
但是下面的方法可以正常使用userMapper,并调用其方法
改为下面这样则不会报错
@Autowired(required = false)
private UserMapper userMapper;
required = true
这个表示:注入bean的时候该bean必须存在,不然就会注入失败!
required = false
这个表示:注入bean的时候如果bean存在,就注入成功,如果没有就忽略跳过,启动不会报错!但是不能直接使用,因为doRequiredTest为NULL
---------------------------------------------------------------------------------------------------------------------------------
@Autowire和@Resource
1.@Autowire注解是根据类型进行匹配的,而@Resource注解是根据name或者type进行匹配的(默认是name)
2.@Autowire注解是Spring里面定义的注解,而@Resource注解是根据JSP 250规范里面定义的注解,只是spring里面对JSP 250规范提供了支持而已
3.@Autowire如果需要支持name匹配,那么就需要@Primary或者@Qualifier注解来实现支持,
例如,如果在spring Ioc容器中如果存在多个类型的bean(如下图),根据类型进行匹配就会报错,原本只能诸如一个单实例Bean,但是由于容器中存在多个,导致注入失败
@Primary,会优先使用声明了@Primary注解的一个Bean
@Qualifier,根据名字去找到需要装配的目标bean