spring的注入方式
前言:
spring的注入方式常见:
1、set注入
2、构造注入
3、自动注入
下面为大家介绍各种注入方式的使用方式。
【注意:】使用set注入和自动注入时,属性都需要set方法。
set注入【常用方式】
设置成员变量,提供set方法。在EmpServiceImpl中需要注入EmpDao,使用如下方法进行注入:
private EmpDao empDao; public void setEmpDao(EmpDao empDao) { this.empDao = empDao; }
xml的配置文件
<bean id="empDao" class="setdi.EmpDaoImpl"></bean> <bean id="empService" class="setdi.EmpServiceImpl"> <!-- property:依赖注入,为哪一个变量注入 name:"为哪个成员变量赋值" 成员变量的名字 ref:注入bean的id --> <property name="empDao" ref="empDao"/> </bean>
注入之后就可以直接使用该对象,spring会为我们自动创建该对象。
spring不仅支持这种对象类型的注入,还支持其他类型的方式注入。
- 基本数据类型
<!-- 基本数据类型 --> <property name="name" value="张三"/> <property name="price" value="20.55"/> <!-- 日期类型 --> <property name="bir" value="2016/7/22 15:13:22"/>
- 数组类型
<!-- 数组 --> <property name="array"> <array> <value>小红</value> <value>小王</value> <value>小张</value> <value>小李</value> </array> </property>
- List集合泛型为基本数据类型
<!-- list<String>集合 --> <property name="list"> <list> <value>你好</value> <value>我好</value> <value>他好</value> </list> </property>
- List集合泛型为对象数据类型
<!-- List<EmpDao>集合 --> <property name="empDaolist"> <list> <ref bean="empDao"/> <ref bean="empDao"/> <ref bean="empDao"/> </list> </property>
- Map类型
<!-- Map类型 --> <property name="maps"> <map> <entry key="123" value="小王"/> <entry key="456" value="校长"/> <entry key="789" value="教师"/> </map> </property>
- Properties类型
<!-- properties类型 底层也是Map类型--> <property name="properties"> <props> <prop key="driver">oracle.jdbc.OracleDriver</prop> <prop key="url">jdbc:oracle:thin:@localhost:1521:xe</prop> <prop key="username">hr</prop> <prop key="password">hr</prop> </props> </property>
构造注入
创建成员变量,提供构造方法例如:
private StudentDAO studentDAO; private String name; private Integer age; private Date bir; private List<String> lists; //构造方法 public StudentServiceImpl(StudentDAO studentDAO, String name, Integer age,Date bir, List<String> lists) { super(); this.studentDAO = studentDAO; this.name = name; this.age = age; this.bir = bir; this.lists = lists; }
xml配置文件中:
在构造注入方式中使用的标签为:constructor-arg
<!-- 管理DAO --> <bean id="studentDAO" class="cdi.StudentDAOImpl"/> <!-- 管理Service --> <bean id="studentService" class="cdi.StudentServiceImpl"> <!-- constructor-arg标签:用来指定使用构造方法进行注入--> <constructor-arg name="studentDAO" ref="studentDAO" /> <constructor-arg name="name" value="张三"/> <constructor-arg name="age" value="14"/> <constructor-arg name="bir" value="2015/10/10 12:45:34"/> <constructor-arg name="lists" > <list> <value>小三</value> <value>小四</value> <value>小五</value> <value>小六</value> </list> </constructor-arg> </bean>
自动注入
自动注入分为两种方式: 1、autowire=“byName” 根据注入的属性名与配置文件中bean的id匹配,一致则注入,不一致则报错。 2、Autowire=“byType” 根据注入的属性类型,与配置文件中的类型匹配,类型一致则注入(在有多个实现类时,会产生歧义)
配置文件:
<!-- 管理DAO --> <bean id="userDao" class="adi.UserDaoImpl"></bean> <!-- 管理Service --> <!-- 通过 autowire=“byName”方式注入--> <bean id="userService" class="adi.UserServiceImpl" autowire="byName"/> <!-- 通过 autowire=“byType”方式注入--> <bean id="userService" class="adi.UserServiceImpl" autowire="byType"/>
【注意:】byName和byType不能同时存在一个bean中。
还有一些其他注入方式,移步大神的博客,在此附上大神的博客地址:
spring中你不知道的注入方式
附上源码,仅供参考
源码地址