ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Spring中我们可以使用以下三个自动装配的注解进行依赖注入: | 注解 | 所在包 | 来源 | | --- | --- | --- | | @Autowired | org.springframework.beans.factory.annotation.Autowired | Spring自带的注解 | | @Resource | javax.annotation.Resource | JSR-250标准的注解 | | @Inject | javax.inject.Inject | JSR-330标准的注解 | * @Autowired注解默认是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,当没有找到相应bean的时候,IOC容器就会报错。不过@Autowired有个required属性,可以配置为false,如果配置为false之后,当没有找到相应bean的时候就注入null,系统不会抛错。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。 * @Resource默认按照名字(byName)装配依赖对象,由JAVAEE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。 * @Inject注解默认也是按照类型(byType)装配依赖对象,如果需要按名称进行装配,则需要配合@Named注解。@Inject 注解没有 required 属性,因此在找不到合适的依赖对象时 inject 会系统会报错失败 > spring @Autowired 注解默认按类型自动装配,当有多个bean能匹配上时将自动切换成按名字(byName)装配,若按名字无法装配时将抛出BeanCreateException