@Autowired
-
默认优先
按照类型
去容器中找对应的组件 -
如果找到多个相同类型的组件,再将
属性的名称作为组件的id去容器中查找
-
@Autowired 配合@Qualifier使用:按照组件的指定的id注入
如下: 表示在容器寻找id为 studentService 实例 注入@Qualifier("studentService") @Autowired private StudentService studentService;
-
在使用@Autowired 进行自动装配的时候,如果装配的组件 有@Primary注解,那么会自动优先装配有@Primary的组件,
如:在使用@Autowired注入StudentService 的时候,会优先注入下图的这个组件(当有多个类型是StudentService存在的时候)
@Autowired其他用法
@Autowired注解可以使用在构造器,参数,方法,属性上
,都是从容器中获取参数组件的值
-
[标注在方法位置]:
-@Bean+方法参数;参数从容器中获取;默认不写@Autowired效果是一样的,都能自动装配。 如下:容器创建StudentController 会默认自动注入studentService
@Bean public StudentController studentController(StudentService studentService) { return new StudentController(); } @Bean public StudentService studentService() { return new StudentService(); }
-
[标在构造器上]:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是可以自动从容器中获取
@Resource
-
@Resource(JSR250) 是 java规范的注解
-
@Resource可以和@Autowired一样实现自动装配功能;默认是按照
组件名称进行装配的
;
进入注入的时候,可以指定组件的名称,如果组件如:@Resource(name="studentService02") private StudentService studentService;
-
在使用@Resource进入注入的时候,如果该类型的组件只有一个实例,那么可以不用指定名称,如果该组件的实例有多个,那么需要指定注入的组件的名称
-
@Resource注解 没有能支持@Primary功能没有支持