1.DI-依赖注入
创建对象的过程中Spring可以依据配置对对象的属性 进行设置,这个过程称之为依赖注入,即DI
2.set方法注入
通常javabean的属性都会私有化,而对外暴露setXx()getXx()方法,此时spring可以通过这样的setXx()方法将属性的值注入对象。
1)spring内置的可直接注入类型的注入
在<bean>标签下添加<property name="set方法名中set之后的单词(首字母小写)" value="要设置的属性的值">
2)非spring内置(即另外的实体类,比如定义一个Person类中有猫和狗两个属性,而猫和狗分别是两个实体类Cat和Dog的对象)的可以直接注入类型的注入
需要添加对应类的<bean>标签,在原始类中添加<property name="自定义名称(一般与类中的属性名称一致)" ref="非spring内置类配置的id值">
3.基于构造方法的注入
在<bean>标签下添加<constructor-arg index="构造方法的第几个参数,下标从0开始" name="为构造方法的哪个名字的参数ref:该构造方法参数的值,用来指定引用其他bean的值>
ps:index和name可以配置任何一个或同时配置,但要求一旦配置必须正确,推荐优先使用index方式配置,防止没有源码造成name无法匹配到对应的参数
4.自动装配
在Spring的set方式实现的注入过程中,支持自动装配机制。所谓自动装配机制,会根据要设置的javabean属性的名字或类型,到spring中自动寻找对应id或类型的<bean>进行设置,从而省去依次配置的过程,简化了配置。
自动装配的两种方式
1)为指定<bean>开启自动装配
在<bean>标签中添加autowire属性:
byName:根据javabean(javabean简单的讲就是实体类,用来封装对象,这个类里面全部都是属性值和get、set方法)中需要注入的属性的名字,在spring容器中找对应id的<bean>,将该<bean>的对象赋值给当前的属性
byType:根据javabean中需要注入的属性的类型,在Spring容器中找对应class类型的<bean>将该<bean>的对象赋值给当前的属性
byType方式根据类型进行匹配,可能匹配到多个<bean>,此时会抛出异常,而byName是通过id来寻找<bean>,id没有重复,不会有这方面的问题,所以推荐使用byName方式
总结:自动装配机制简化了set方法注入中的非Spring内置的可以直接注入类型的注入
2)为全局配置自动装配
在<beans>标签中添加default-autowire属性:
byName与byType和第一点相同