spring ioc

spring注入的三种匹配方式:byType、byName、constructor
基于注解的自动装配
1.@Autowired
通过@Autowired标注成员变量时不要有set方法
@Autowired默认是按byType进行匹配的,如果需要按照byName进行需要,需要结合@Qualifier使用:例如@Qualifier("userDao1")

2.@Resource
@Resource默认按byName进行模式自动注入,可以标注成员变量和set方法上,但无法标注构造函数。
@Resource有两个重要的属性,name和type,name解析为bean的名字,type解析为bean的类型
  使用name则按照byName模式进行注入
  使用type则按照byType模式进行注入
  不指定则通过反射技术默认按照byName进行注入
//@Autowired标注成员变量
@Autowired
@Qualifier("userDao")
private UserDao userDao;  
//上述代码等价于@Resource
@Resource(name=“userDao”)
private UserDao  userDao;//用于成员变量

//也可以用于set方法标注
@Resource(name=“userDao”)
public void setUserDao(UserDao userDao) {
   this.userDao= userDao;
}

3.@Value
  解决简单值的注入,解决硬编码问题
  一般@Value会与properties文件结合使用

4.为什么实际工作中我们不用在xml中配置若干bean
***************************************************************************************************************************************
***1.上述的Bean对象声明使用都在xml内声明手动声明的方式,一旦Bean对象多起来,管理Bean可能会发生繁琐的情况,为此Spring提供了基于Java注解的配置方式***
***2.有了注解声明,我们就不需要在xml中声明以上两个Bean,但需要明确告诉Spring注解的Bean在那些包下,因此需要添加包扫描机制,
*****此时需要启用Spring的context命名空间:
***************************************************************************************************************************************
@Service和@Repository等于@Component 相同效果
@Component与@Service的含义并无差异
@Repository在表示数据访问层含义的同时还能够启用与Spring数据访问相关链的其他功能

@Repository 用于对DAO实现类进行标注
@Service 用于对Service实现类进行标注
@Controller 用于对Controller实现类进行标注(web层控制器)

Bean实例化方法,一般采用构造方法,其次还有静态方法构造和实例工厂方法构造。
但早期无论是采用默认的构造方法还是带参数的构造方法,都是xml文件对属性进行赋值

@Scope("prototype"):声明作用域,默认是singleton

原文地址:https://www.cnblogs.com/anjunshuang/p/9408972.html