ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### @Autowired用法 * 注解构造方法 * setter方法注解 * @Autowired注解可以用在类的任何方法 ``` 1.注解构造方法 @Component public class UserDao { private IRedisService redisService; @Autowired public UserDao(RedisServiceImpl redisService) { this.redisService = redisService; } } 2.setter方法注解 @Component public class UserDao { private IRedisService redisService; @Autowired public void setRedisService(IRedisService redisService) { this.redisService = redisService; } } 3.@Autowired注解可以用在类的任何方法 ``` ### @Autowired装配过程 1. @Autowired注解装配时,假如有且只有一个bean匹配依赖需求的话,那么这个bean将会被装配进来; 2. 如果没有匹配的bean,那么在应用上下文创建的时候,Spring会抛出一个异常。为了避免异常的出现,你可以将@Autowired的required属性设置为false;将required属性设置为false时,Spring会尝试执行自动装配,但是如果没有匹配的bean的话,Spring将会让这个bean处于未装配的状态。但是,把required属性设置为false时,你需要谨慎对待。如果在你的代码中没有进行null检查的话,这个处于未装配状态的属性有可能会出现NullPointerException; ``` @Component public class UserDao { @Autowired(required=false) private IRedisService redisService; } ``` 3. 如果有多个bean都能满足依赖关系的话,Spring将会抛出一个异常,表明没有明确指定要选择哪个bean进行自动装配; ### @Inject @Autowired是Spring特有的注解。如果你不愿意在代码中到处使用Spring的特定注解来完成自动装配任务的话,那么你可以考虑将其替换为@Inject: ``` @Component public class UserDao { @Inject private IRedisService redisService; } ``` 说明:@Inject注解来源于Java依赖注入规范,该规范同时还为我们定义了@Named注解。在自动装配中,Spring同时支持@Inject和@Autowired。尽管@Inject和@Autowired之间有着一些细微的差别,但是在大多数场景下,它们都是可以互相替换的 ### 自动装配的歧义性 1. @Autowired自动装配时如果有多个实例,无法确定唯一值,则spring会抛出异常; 2. 指定首选项@Primary; 3. 使用限定符@Qualifier指定要注入的beanId; 说明:@Qualifier的优先级将高于@Primary