Spring 组建装配
< context:component-scan>元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired、@Resource、@Qualifier注解属性
- @Autowired注解自动装配具有兼容类型的单个Bean属性
- 构造器,普通字段,一切具有参数的方法都可以应用@Autowired注解
- 默认情况下,所有使用@Autowired注解的属性都需要设置。当Spring找不到匹配的Bean装配属性时。会抛出异常。若某一属性允许不被设置,可以设置@Autowired注解的required属性为false(required=false)
- 默认情况下,当IOC容器中存在多个类型兼容的Bean时,通过类型的自动装配将无法工作。此时可以在@Qualifier注解提供Bean的名称。Spring允许对方法的入参标注@Qualifier已指定注入Bean的名称
- @Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的Bean进行自动装配。
- @Autowired注解也可以应用在集合属性上,此时Spring读取该集合的类型信息,然后自动装配所有与之兼容的Bean。
- @Autowired注解在java.util.Map上时,若该Map的键值为String,那么Spring将自动装配与之Map值类型兼容的Bean,此时Bean的名称作为键值
public class TestAnnotation {
}
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("repository");
}
}
@Service
public class UserServiceImpl {
//@Autowired
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Autowired(required=false)
private TestAnnotation testAnnotation;
public void save() {
System.out.println(testAnnotation);
System.out.println("service....");
userDao.save();
}
}
@Controller
public class UserController {
@Autowired
private UserServiceImpl userServiceImpl;
public void save() {
System.out.println("controller...");
userServiceImpl.save();
}
}
结果:
UserController userController=ioc.getBean("userController", UserController.class);
System.out.println(userController);
userController.save();
使用@Resource和@Autowired功能类似