据我所学,spring实现依赖注入(DI)的方式分为三大类:基于构造器(构造方法)的依赖注入、基于setter的依赖注入、其他方式(c命名空间、p命名空间等)。其中推荐使用setter方法注入,这种注入方式也是最多人使用的。
下面我们通过代码来举例三种注入方式:
1.基于构造器(构造方法)的依赖注入
这种方式是通过实体类中的构造方法来完成属性的赋值,所以实体类中必须含有带参的构造方法!
首先先编写实体类User,如下:
public class User { private int id; private String name; private int age; private String pwd; public User() { } public User(int id, String name, int age, String pwd) { this.id = id; this.name = name; this.age = age; this.pwd = pwd; System.out.println("User的全参构造"); } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", pwd='" + pwd + '\'' + '}'; } }
然后我们就可以编写配置文件了,一共有三种方式,这三种方式都是一样的,掌握一种便可以了,推荐使用方式一。
方式一:通过属性名称赋值
<bean id="user" class="com.kuang.pojo.User"> <constructor-arg name="id" value="0000"/> <constructor-arg name="age" value="21"/> <constructor-arg name="pwd" value="123456"/> <constructor-arg name="name" value="张三"/> </bean>
方式二:通过下标赋值
注意:这里index就是实体类中属性的索引,从0开始,实体类中从上到下第一个属性的索引为0,第二个属性的索引为1....以此类推。
<!--通过下标赋值--> <bean id="user" class="com.kuang.pojo.User"> <constructor-arg index="0" value="0000"/> <constructor-arg index="1" value="张三"/> <constructor-arg index="2" value="21"/> <constructor-arg index="3" value="123456"/> </bean>
方式三:通过类型赋值
<bean id="user" class="com.kuang.pojo.User"> <constructor-arg type="int" value="0000"/> <constructor-arg type="java.lang.String" value="张三"/> <constructor-arg type="int" value="21"/> <constructor-arg type="java.lang.String" value="123456"/> </bean>
2.基于setter的依赖注入
这种方式是通过实体类中的setter方法来完成属性的赋值的,所以实体类中必须有各个属性的setter方法!
Student实体类如下:
public class Student { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,String> card; private Set<String> game; private String wife; private Properties info; public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String[] getBooks() { return books; } public void setBooks(String[] books) { this.books = books; } public List<String> getHobbys() { return hobbys; } public void setHobbys(List<String> hobbys) { this.hobbys = hobbys; } public Map<String, String> getCard() { return card; } public void setCard(Map<String, String> card) { this.card = card; } public Set<String> getGame() { return game; } public void setGame(Set<String> game) { this.game = game; } public String getWife() { return wife; } public void setWife(String wife) { this.wife = wife; } public Properties getInfo() { return info; } public void setInfo(Properties info) { this.info = info; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", address=" + address + ", books=" + Arrays.toString(books) + ", hobbys=" + hobbys + ", card=" + card + ", game=" + game + ", wife='" + wife + '\'' + ", info=" + info + '}'; } }