(1)依赖关系:在当前类需要其他类的对象,由spring为我们提供,只需要在配置文件中说明依赖关系的维护。
(2)注入数据:
基本数据类型和string
其他bean类型(在配置文件中或者注解配置过的bean)
复杂类型/集合类型
private String[] myStrs;
private List<String> myList;
private Set<String> mySet;
private Map<String,String> myMap;
private Properties myProps;
public void setMyStrs(String[] myStrs) {
this.myStrs = myStrs;
}
public void setMyList(List<String> myList) {
this.myList = myList;
}
public void setMySet(Set<String> mySet) {
this.mySet = mySet;
}
public void setMyMap(Map<String, String> myMap) {
this.myMap = myMap;
}
public void setMyProps(Properties myProps) {
this.myProps = myProps;
}
<bean id="acountService3" class="cn.rzpt.service.impl.AcountServiceImpl3">
<!--复杂数据类型(集合类型)注入
用于给List结构集合注入的标签有:list,array,set
用于给Map结构注入的标签有:map,props
结构相同,标签可以互换
-->
<property name="myStrs">
<array>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</array>
</property>
<property name="myList">
<list>
<value>laaa</value>
<value>lbbb</value>
<value>lccc</value>
</list>
</property>
<property name="mySet">
<set>
<value>saaa</value>
<value>sbbb</value>
<value>sccc</value>
</set>
</property>
<property name="myMap">
<map>
<entry key="ka" value="aaa"></entry>
<entry key="kb">
<value>bbb</value>
</entry>
</map>
</property>
<property name="myProps">
<props>
<prop key="pka">pkaaa</prop>
<prop key="pkb">pkbbb</prop>
</props>
</property>
</bean>
(3)注入方式:
使用构造函数:
private String name;
private Integer age;
private Date birthday;
public void AcountServiceImpl(String name,Integer age,Date birthday){
this.name = name;
this.age = age;
this.birthday = birthday;
}
<bean id="accountService" class="cn.rzpt.service.impl.AcountServiceImpl">
<!--构造方法注入
type:用于指定要注入的数据的数据类型,该数据类型也是构造方法中某个或某些参数的类型,不能独立实现注入内容
index:用于指定要注入的数据给构造方法中指定索引位置的参数赋值。从0开始,但是遇到复杂情况,不能识别使用
name:用于指定给构造方法中指定名称的参数赋值,常用
value:用于给基本数据类型和String类型赋值
ref:用于指定其他的bean类型数据赋值,引用的数据
-->
<constructor-arg name="name" value=""></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="birthday"></constructor-arg>
</bean>
<bean id="birthday" class="java.util.Date">
</bean>
优势:在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。
劣势:改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这个对象或数据,也同样要必须提供。
使用 setter方法:常用此方法注入数据
private String name;
private Integer age;
private Date birthday;
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
<bean id="acountService2" class="cn.rzpt.service.impl.AcountServiceImpl2">
<!--setter方法注入
使用的标签:property
-->
<property name="name" value="钉钉"></property>
<property name="age" value="19"></property>
<property name="birthday" ref="birthday"></property>
</bean>
<bean id="birthday" class="java.util.Date"> </bean>
优势:创建对象时没有明确的限制,可以直接使用默认的构造方法
劣势:如果有某个成员必须有值,则获取对象时有可能set方法没有执行。
使用注解
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"
scope="" init-method="" destroy-method="">
<property name="" value="" | ref=""></property>
</bean>
有四个应用方向:
用于创建对象的注解:
和在xml配置文件中编写一个<bean>标签实现的作用是一样的
@Componect:作用:用于把当前类对象存入容器中,属性是value用于指定bean的id。默认值是当前类名,首字母改小写。
用于注入数据的注解
和在xml配置文件中<bean>标签中的<properity></properity>实现的作用是一样的
用于改变作用范围的注解
和在xml配置文件中<bean>标签中的<scope></scope>实现的作用是一样的
和生命周期相关的注解
和在xml配置文件中<bean>标签中的<init-method><destory-method>实现的作用是一样的
(4)经常变化的数据并不适用于注入的方式