1.bean装配
- 1.bean的装配是指在spring容器中把bean组装在一起
- 2.装配的前提是spring容器需要知道bean的依赖关系
- 3. 通过依赖注入把bean装配在一起
- 4.将一个Bean自动注入到其他Bean的Property中叫自动装配
2.装配的方式
- 1.基于xml装配
- 2.基于注解装配
3.基于xml装配
- 1.设置值注入
- 2.构造方法注入
4.设置值注入
- 1.Bean类需要提供一个默认的无参构造方法
- 2.Bean类需要为注入的属性提供set方法
- 3.配置文件通过<bean><property></property></bean>中的property标签为属性注入值
5.构造方法注入
- 1.Bean类需要提供有参构造方法
- 2.配置文件通过<constructor-arg>标签来定义构造方法的参数,也可以使用其value属性来设置该参数的值
6.基于注解的装配
- 1.@Component:描述Spring中的Bean,可以作用在任何层次
- 2.@Repository: 用于持久层(Dao层)
- 3.@Service:用于业务层(Service层)
- 4.@Controller:用于控制层(Controller层)
- 5.@Autowired:用于对Bean的属性变量、属性的setter方法以及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作。默认按照Bean的类型进行装配。
- 6.@Resource:作用和@Autowired一样。区别是@Autowired默认Bean的类型装配,@Resource默认按照Bean的实例名称进行装配。@Resource有name和type两个属性,name会解析为Bean的实例名称,type会解析为Bean的实例类型。指定name则按实例名称进行装配,指定type则按类型进行装配,都不指定则先按name再按type,都没有的话抛出NoSuchBeanDefinitionException异常
- 7.@Qualifier:当一个接口A有两个实现类A1、A2,如果@Autowired private A a1;此时按类型装配,会找到a1和a2,此时会尝试按名称a1装配(setA1方法去掉set然后首字符小写),得到a1。如果@Autowired private A b;此时按类型装配,会找到a1和a2,此时会尝试按名称b来装配,但找不到,此时会抛出异常NoUniqueBeanDefinitionException。可以加个@Qualifier注解指定名称装配
7.自动装配
- 1.spring的 <bean>元素中包含一个 autowire 属性,通过设置 autowire 的属性值来自动装配Bean
- 2.default:由<beans>的default-autowire属性值来确定
- 3.byName:根据属性的名称自动装配。容器将根据名称查找与属性完全一致的Bean,并将其属性自动装配
- 4.byType:根据属性的数据类型自动装配。
- 5.constructor:根据构造函数参数的数据类型,进行byType模式的自动装配
- 6.no:在默认情况下,不使用自动装配,Bean依赖必须通过ref元素定义