Spring 的两种依赖注入方式
Spring 的两种依赖注入方式:
setter()方法注入,构造器注入
测试demo
1)创建一个User类
public class User { private String userName; private String pwd; private List<String> list; /** * 1.使用构造注入 * 1.1提供带有参数的构造方法 */ public User(String userName, String pwd, List<String> list) { super(); this.userName = userName; this.pwd = pwd; this.list = list; } @Override public String toString() { return "User [userName=" + userName + ", pwd=" + pwd + ", list=" + list + "]"; } /** * 2.使用设置值注入(set 注入) * 2.1提供默认无参的构造方法 * 2.2为所有属性提供setter()方法 */ public User() { super(); } public void setUserName(String userName) { this.userName = userName; } public void setPwd(String pwd) { this.pwd = pwd; } public void setList(List<String> list) { this.list = list; } } |
类中含有无参的构造方法和有参的构造方法,用于测试构造器注入,类中创建的setXXX方法用于setter()方法注入
2)创建一个application配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <!-- 将指定类配置给spring,让spring创建其对象的实例 -->
<!-- 表示在容器中创建一个id为UserDao的Bean实例-- > <!-- 构造方法注入 --> <bean id="user1" class="org.lyl.sample.User"> <constructor-arg index="0" value="Tom"></constructor-arg> <constructor-arg index="1" value="one"></constructor-arg> <constructor-arg index="2"> <list> <value>"构造方法值1"</value> <value>"构造方法值2"</value> </list> </constructor-arg> </bean> <!-- setter()方法注入 --> <bean id="user2" class="org.lyl.sample.User"> <property name="userName" value="Jhon"></property> <property name="pwd" value="two"></property> <property name="list"> <list> <value>"setter1"</value> <value>"setter2"</value> </list> </property> </bean> </beans> |
构造方法注入:
<bean/>标签的子元素标签使用 <constructor-arg/>,constructor-arg标签中的index对应User类中的属性从上到下一一对应,即index=1,对应user类中的userName;index=2,对应user类中的pwd字段属性 ;value对应User类中的字段属性的值。User类中要用全参构造方法用来传递参数。
Setter()方法注入
<bean/>标签的子元素标签使用<property/>, property中的name对应类的属性字段,value对应类属性字段的值,要使用setter()法注入,类中必须要有setxxx()方法
3)创建测试类测试
public class UserTest { public static void main(String[] args) { //初始化spring容器,加载配置文件 ApplicationContext as=new ClassPathXmlApplicationContext("applicationContext.xml"); //输出获得的实例 System.out.println(as.getBean("user1")); System.out.println(as.getBean("user2")); } } |
输出结果如图,成功的使用了XML的两种注入方式,构造器注入,setter()方法注入