一.set方法注入
1.直接写
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
}
就是上面这种,在applicationContext.xml中也很容易
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
但要注意,调用谁谁在property中,另外,name是上面UserDao的变量名。如果不是会一直爆红
2.利用p命名空间注入,代码与上面一样,xml配置如下
xmlns:p="http://www.springframework.org/schema/p"
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"
p:userDao-ref="userDao"/>
注意上面xmlns是写在<beans>里的
二.构造方法注入
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServletImpl(UserDao userDao){
this.userDao=userDao;
}
public UserServletImpl() {
}
public void save() {
userDao.save();
}
}
只是将getUserDao的方法换成构造器,并且在xml中也有变化
<bean id="userDao" class="Day03.impl.UserDaoimpl"></bean>
<bean id="userServlrt" class="Day03.impl.UserServletImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
注入的标签变成了constructor-arg,其他类似,但好像没有p命名空间的用法。
三.注入数据的三种类型
- 普通数据类型
- 引用数据类型
- 集合数据类型
上面演示均为引用数据类型普通数据类型就相当于xml文件中赋值
public class UserDaoImpl implements UserDao {
private String company;
private int age;
public void setCompany(String company) {
this.company = company;
}
public void setAge(int age) {
this.age = age;
}
public void save() {
System.out.println(company+"==="+age);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="company" value="传智播客"></property> <property name="age" value="15</property>
</bean>
引入集合类型需要将集合中的数据一一写下来,也相当于赋值操作,代码参考上面的xml文件
Map<String,User>:
<bean id="u1" class="com.itheima.domain.User"/> <bean id="u2" class="com.itheima.domain.User"/> <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"> <property name="userMap"> <map> <entry key="user1" value-ref="u1"/> <entry key="user2" value-ref="u2"/> </map> </property> </bean>
List<String>:
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"> <property name="strList"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property> </bean>
List<User>
<bean id="u1" class="com.itheima.domain.User"/> <bean id="u2" class="com.itheima.domain.User"/> <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"> <property name="userMap"> <map> <entry key="user1" value-ref="u1"/> <entry key="user2" value-ref="u2"/> </map> </property> </bean>
Properties:
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"> <property name="properties"> <props> <prop key="p1">aaa</prop> <prop key="p2">bbb</prop> <prop key="p3">ccc</prop> </props> </property> </bean>