一、@Autowired用法
1、@Autowired注解默认当前的依赖是必须的
可以通过@Autowired(required = false)将required属性的值设置为false来消除这种错误。
@Repository
public class UserDao {
public UserDao() {
System.out.println("创建构造器UserDao");
}
private int flag=1;
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
@Override
public String toString() {
return "UserDao{" +
"flag=" + flag +
'}';
}
}
@Service
public class UserService {
@Autowired
private UserDao userDao;
public UserService() {
System.out.println("创建构造器UserService");
}
@Override
public String toString() {
return "UserService{" +
"userDao=" + userDao +
'}';
}
}
@ComponentScan(basePackages = {"com.bert.assembly"})
public class AssemblyConfig {
}
public class AssemblyMain {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AssemblyConfig.class);
UserService userService = (UserService) ctx.getBean("userService");
System.out.println(userService);
}
}
运行结果:
创建构造器UserDao
创建构造器UserService
UserService{userDao=UserDao{flag=1}}
2、假设我们需要指定特定的组件来进行装配,我们可以通过使用@Qualifier("tulingDao")来指定装配的组件
@Service
public class UserService {
@Autowired
@Qualifier(value = "userDao2")
private UserDao userDao;
public UserService() {
System.out.println("创建构造器UserService");
}
@Override
public String toString() {
return "UserService{" +
"userDao=" + userDao +
'}';
}
}
@ComponentScan(basePackages = {"com.bert.assembly"})
@Configuration
public class AssemblyConfig {
@Bean
public UserDao userDao2() {
UserDao userDao = new UserDao();
userDao.setFlag(2);
return userDao;
}
}
运行结果:
创建构造器UserDao
创建构造器UserService
创建构造器UserDao
UserService{userDao=UserDao{flag=2}}
3、@Resource(JSR250规范) 功能和@AutoWired的功能差不多一样,但是不支持@Primary 和@Qualifier的支持
4、@InJect(JSR330规范) 需要导入jar包(javax.inject)依赖 功能和支持@Primary功能 ,但是没有Require=false的功能
5、使用autowired标注在不同地方
可以标注在set方法上
@Autowired
public void setUserDao(UserDao UserDao) { this.UserDao = UserDao;
}
标注在构造方法上
@Autowired
public UserService(UserDao UserDao) { this.UserDao = UserDao;
}
标注在配置类上的入参中(可以不写)
@Bean
public UserService UserService(@Autowired UserDao UserDao) {
UserService UserService = new UserService(UserDao);
return UserService;
}
本文深入解析Spring框架中@Autowired注解的使用方法,包括其默认的必需依赖特性、如何通过设置required属性来改变这一行为,以及如何使用@Qualifier注解来指定特定的组件进行装配。同时,对比了@Resource和@Inject注解的功能差异。

1403

被折叠的 条评论
为什么被折叠?



