前面介绍过通过@Import/@ComponentScan+@Component/@Bean/实现FactoryBean接口四种方式可以把bean加到spring的ioc容器中来。
而@AutoWired注解则可以为这些加到容器中的实例的变量,参数,方法进行自动赋值。
主要知识点:
1.@Autowired 默认时根据类型来赋值的,可以使用@Bean(autowire = Autowire.BY_NAME)修改成按照名字来装配。
2. 当在spring容器中有多个类型相同的时候实例时,我们可以在备选的bean上面加上@Primary注解来标识优先选择。
3. 当在spring容器中有多个类型相同的时候实例时可以用@Qualifier指定按名称装配。
4. @Autowired可以放在方法的参数前,当该方法所属的类被初始化时该方法会自动被调用,会自动的给参数赋合适的值。
5. @Autowired可以放在方法上,当该方法所属的类被初始化时该方法会自动被调用,所以可以用它来为某些变量赋值。
6. 当变量上的被@Autowired注解时,如果从spring 容器中找不到合适值来注入时会报错,为了不报错我们可以使用注解@Autowired(required = false),这样有合适的就会注入,没有则放弃,不会报错。
7. @Autowired是spring自带的,@Inject是JSR330规范实现的,@Resource是JSR250规范实现的,需要导入不同的包。
可以了解的知识:@Inject @Inject是默认按照类型匹配的 ,@Inject和@Name一起使用 @Autowired如果需要按照名称匹配需要和@Qualifier,@Resource @Resource是按照名称匹配的
8.@Autowired可以注解到在构造器上。我没有实验成功,稍后再试试。
为了在例子长包含上面说到的所以情况, 下面定义了一个call special srevice的例子,具体类图如下:
首先定义两个接口BeautyGril 漂亮小姐姐和GentleGril 温柔小姐姐。
package com.allen.trainning.spring.autowi