我们这里讨论的Bean装配,指的是AbstractBeanDefinition类中的下面4个属性:
AUTOWIRE_NO = 0;
AUTOWIRE_BY_NAME = 1;
AUTOWIRE_BY_TYPE = 2;
AUTOWIRE_BY_CONSTRUCTOR = 3;
一,AUTOWIRE_BY_NAME与AUTOWIRE_BY_TYPE的区别
首先需要明确一点:AUTOWIRE_BY_NAME还是AUTOWIRE_BY_TYPE,是使用XML文件来配置Bean依赖,这个和Spring注解的自动装配没有关系。Spring的@Autowire注解是不能指定byName还是byType的。
使用XML配置文件注入Bean是,有个属性是autowire,可选值有byName和byType,我们讨论的就是这个。
OK,范围确定了,我们开始吧。
首先,我们来看结论:
byName:根据属性名称自动装配。就是根据XML文件中的bean标签的id进行匹配。每次配置bean时,必须指定id,这个id就是beanName。
byType:根据属性的类型自动装配。这个理解起来有点费劲,不仔细研究的话,根本理解不了。这里的属性是什么?是我们需要注入的bean,也就是我们在一个Service实现类中定义的Dao接口对象。这个说的够具体了吧,我们还会给这个Dao接口提供setter方法以便注入。
属性类型是什么呢?就是Dao的具体实现类,比如XxxDaoImpl.java。加入我们配置了2个XxxDaoImpl的bean,一个id是xxxDao1,一个id是xxxDao2,那么如果我们使用byType注入,就会报错。因为Spring根据类型去查询,找到了2个。
网友评论