三种方式的注解注入
- @Autowired(spring提供的) 自动装配 : 常用于三层组件(4个注册+扫描器)
- 注意:@Autowired从IoC容器中,根据类型(byType)自动注入(没有调用setXxx()方法)
- 例如:private UserDao userDao;打上此注解会在容器中找UserDao类型的对象
- 注意:如果@Autowired在属性前标注(还能在set方法上打),则不调用setXxx;如果标注在setXxx前面,则调用setXxx
- 注意:三层组件场合时,@Autowired是不能放在方法的参数前
例如:Bean+返回值形式:
@Autowired 在方法的参数前(也可以省略)、方法前 (构造方法:特殊,如果只有一个有参构造方法,则构造方法前的@Autowired也可以省略)
默认@Autowired自动注入根据类型(byType),怎么根据bean类的名字注入?
> 三层组件和@Bean都适用
- 即多个实现类实现了同一个接口,并且这些实现类都在容器中,那么就要用根据名字来注入具体bean
- 方法:在@AutoWired注解上边打上@Qualifier(“具体bean的id值”)明确指出注入的bean
- @AutoWired单独使用是byType,@AutoWired和@Qualifier组合之用byName
- 如果要注入的属性类型不存在,会报错(No beans),此时可以@AutoWired的属性值设置非必须和默认值(在要设置的bean类上打@Primary,这个注解在下边方式二也能用)
- @Resource(java提供,JSR250),默认根据名字匹配,若名字没有找到,会再根据类型找
- 也能写死根据名字还是类型:@Resource(name=“bean的id”)根据名字,@Resource(type=“bean的类型”)
- @Inject(java提供,JSR330),还需要额外引jar,javax-inject.jar
- 默认根据类型匹配,也是打在属性上