依赖注入是一个重要的知识点,很多大型项目都要用到依赖注入的思想,那么怎么理解依赖注入呢?
首先学会的是关于set方法的注入:在一个自己创建的iUser类中,封装所有的私有属性,例如name,age,还有一些个复杂属性list,map之类的。很多人会问啥是封装属性:private String name ,private int age, private List list,private Map map和private Dog dog(引用类型)。然后给这些属性配上get和set方法,尤其是set方法,需要用于依赖注入,在配上toString方法好进行查看和输出内容。
package pojo;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class User {
//简单类型
private String name;
private int age;
//复杂类型
private List list;
private Map map;
private Set set;
private String[] arr;
private Properties pro;
//引用类型
private Dog dog;
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public List getList() {
return list;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Set getSet() {
return set;
}
public void setSet(Set set) {
this.set = set;
}
public String[] getArr() {
return arr;
}
public void setArr(String[] arr) {
this.arr = arr;
}
public Properties getPro() {
return pro;
}
public void setPro(Properties pro) {
this.pro = pro;
}
public void setList(List list) {
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", list=" + list
+ ", map=" + map + ", set=" + set + ", arr="
+ Arrays.toString(arr) + ", pro=" + pro + ", dog=" + dog + "]";
}
}
<bean id="user" class="pojo.User">
<!-- property标签:表示描述类中的各个属性
name="" : 表示 属性名
value="" :表示 属性值
spring在依赖注入时:自动识别 简单的数据类型
-->
<property name="name" value="张三丰"></property>
<property name="age" value="10"></property>
<!-- 复杂类型 -->
<!-- list在spring中,默认是ArrayList类型的 -->
<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
</list>
</property>
<property name="map">
<map>
<entry key="1" value="一"></entry>
<entry key="2" value="二"></entry>
<entry key="3" value="三"></entry>
<entry key="4" value="四"></entry>
</map>
</property>
<property name="set">
<set>
<value>1</value>
<value>1</value>
<value>1</value>
<value>1</value>
</set>
</property>
<!-- 数组 array -->
<property name="arr">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
</list>
<!-- 探索:<array>标签到底是什么意思? -->
</property>
<!-- properties :userName = root -->
<property name="pro">
<props>
<!-- key:value键值对 -->
<prop key="1"> 八 </prop>
<prop key="2"> 二 </prop>
<prop key="3"> 三 </prop>
<prop key="4"> 四 </prop>
</props>
</property>
<!-- 引用类型
ref="" : 引用了 其他的bean标签,值是bean标签中的id的值
-->
<property name="dog" ref="dog"></property>
</bean>
<!-- 描述Dog类的对象
练习:对Dog类增加几个属性,然后进行依赖注入
在user对象中,把dog对象注入到User的dog属性中
-->
<bean id="dog" class="pojo.Dog"></bean>
其中<property>标签就是进行set方式的 依赖注入的,name="set函数后缀首字母小写" 其中引用类型的注入式ref="dog" 即 <bean id="dog" class="pojo.Dog"></bean>中的id="dog" 将dog这个类中的属性也通过ref注入到user之中。
以上是关于set方法的注入。
关于构造方法的注入呢?
<bean id="user" class="pojo.User" >
<constructor-arg index="0" name="属性的名字,如id,age,name等" value=”要注入的值“ ref="引用类型的id">
<list>
<value>1</value>
</list>
</constructor-arg>
</bean>
跟楼上<property>标签用法大体上类似
关于set方法注入和构造方法注入都有了之后,学习其他更简单方法的注入,关于注解的神奇用法: