目录
- 若学习《spring容器使用setter、构造器、自动装配方式实现依赖注入》。请前往作者上一篇博客------spring学习(spring-DI(setter注入、构造器注入、自动装配方式))-CSDN博客
一、单个字符串或对象引用的注入。
(1)简单案例演示。
1、项目的基本结构和类介绍。
- 在UserDaoImpl实现类中。拥有两个成员属性(字符串类型与引用类型(对象))。提供对应的setter方法。提供save()方法,且方法中打印字符串类型与引用类型(对象)的数据。
- 测试时:通过容器对象获取spring容器管理的"UserDaoImpl"的实例化对象。再调用本身的save方法。save()方法再执行其他逻辑。
- pom.xml文件中引入spring-context的依赖坐标。
2、接口"UserDao"代码。
- 提供抽象方法save()。实现类"UserDaoImpl"再去实现save()方法。
javapackage com.fs.dao; public interface UserDao { //UserDao的save方法 void save(); }
3、实现类"UserDaoImpl"代码。
- 实现接口"UserDao"并实现其save()方法。
- 提供成员变量(str(字符串)、user(对象))。且提供相应的setter方法。使用注入的方式获取对应的值和实例化bean。
javapackage com.fs.dao.impl; import com.fs.dao.UserDao; import com.fs.entity.User; public class UserDaoImpl implements UserDao { //字符串属性 String str; //类对象属性 User user; public void setStr(String str) { this.str = str; } public void setUser(User user) { this.user = user; } @Override public void save() { System.out.println("UserDaoImpl save..."); //打印注入的字符串属性 System.out.println(str); //打印注入的类对象属性 System.out.println(user); user.setUsername("zhangsan"); user.setPassword("123456"); System.out.println("用户名:"+user.getUsername()+",密码:"+user.getPassword()); } }
4、spring配置文件。
- 使用标签<bean>、<property>、<ref>。以及属性"name"、"value"、"bean"。
- 具体用法各位自己查资料或者看博主介绍或者相信大家懂得!
XML<?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.xsd"> <!--配置UserDapImpl的bean--> <bean id="userDao" class="com.fs.dao.impl.UserDaoImpl"> <!--使用<property>标签给成员属性赋值--> <property name="str" value="helloworld"></property> <property name="user"> <!--使用<ref>标签给引用类型(对象)赋值--> <ref bean="user"></ref> </property> </bean> <!--配置实体类User对象的bean--> <bean id="user" class="com.fs.entity.User"></bean> </beans>
5、测试类(MainApp)。
- 使用ApplicationContext容器加载配置文件。再调用容器对象的getBean()方法获取"UserDaoImpl"类的实例化bean。通过该bean对象调用save()方法。
javapackage com.fs.test; import com.fs.dao.impl.UserDaoImpl; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { //使用IoC容器(ApplicationContext)获取spring容器管理的bean对象 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springC.xml"); //2.通过<bean>标签的唯一标识id获取配置的bean对象 Object obj = context.getBean("userDao"); //强制转换 UserDaoImpl userDao = (UserDaoImpl) obj; //调用UserDaoImpl中的save方法 userDao.save(); } }
6、查看执行结果。(对应成员变量成功注入!)
二、集合类型(对象)注入。
(1)XMind图解。(格式和基本用法)
(2)简单案例演示。
1、项目的基本结构和类介绍。
- 话不多说。拿上面案例简单修改即可,添加几个成员属性再依次通过setter注入即可。
- 数组对象。int[] array。
- List集合对象。List<String> list1。List<User> list2。
- Set集合对象。Set<String> set。
- Map集合对象。Map<String,String> map。
- Properties对象:properties。
- 关于类的代码基本不变化。最大变化------spring配置文件(各种标签的使用)。
2、接口"UserDao"代码。
- 同样提供抽象方法save()。实现类"UserDaoImpl"再去实现save()方法。
javapackage com.fs.dao; public interface UserDao { //UserDao的save方法 void save(); }
3、实现类"UserDaoImpl"代码。
- 同样实现接口"UserDao"并实现其save()方法。
- 创建需要测试的数组与几个集合的成员变量。并提供相应的setter方法。以便完成相应的值的注入!
- save()方法除了打印自身需要的外,还需要依次打印对应的数组和几个集合对象的值。因为要测试是否成功的依靠配置文件(spring.xml)完成注入!
javapackage com.fs.dao.impl; import com.fs.dao.UserDao; import com.fs.entity.User; import java.util.*; public class UserDaoImpl implements UserDao { //基本数据类型的数组对象 private int[] array; //List<String>集合对象 private List<String> list1; //List<User>集合对象 private List<User> list2; //Set<String>集合对象 private Set<String> set; //Map<String,String>集合对象 private Map<String,String> map; //Properties类对象 private Properties properties; //提供相应的setter方法 public void setArray(int[] array) { this.array = array; } public void setList1(List<String> list1) { this.list1 = list1; } public void setList2(List<User> list2) { this.list2 = list2; } public void setSet(Set<String> set) { this.set = set; } public void setMap(Map<String, String> map) { this.map = map; } public void setProperties(Properties properties) { this.properties = properties; } @Override public void save() { System.out.println("UserDaoImpl save..."); //将数组转换为字符串形式。以便打印! System.out.println("遍历数组:"+ Arrays.toString(array)); //遍历List集合 System.out.println("遍历list1:"+list1); System.out.println("遍历list2:"+list2); //遍历Set集合 System.out.println("遍历Set:"+set); //遍历Map集合 System.out.println("遍历Map:"+map); // System.out.println("遍历Properties:"+properties); } }
4、spring配置文件。(此处重点)
- 使用标签<bean>、<property>、<ref>、<array>、<list>、<set>、<value>、<map>、<entry>、<props>、<prop>等等。以及属性"key"、"value"、"bean"等等。
- 具体用法各位自己查资料或者看博主介绍或者相信大家懂得!
XML<?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.xsd"> <!--配置UserDapImpl的bean--> <bean id="userDao" class="com.fs.dao.impl.UserDaoImpl"> <!--配置成员属性:数组--> <property name="array"> <array> <value>666</value> <value>888</value> <value>999</value> </array> </property> <!--配置成员属性:list集合--> <property name="list1"> <list> <value>abc</value> <value>hello</value> <value>world</value> </list> </property> <property name="list2"> <list> <!--根据不同的id--> <ref bean="user"></ref> <ref bean="use1"></ref> <ref bean="use2"></ref> </list> </property> <!--配置成员属性:Set集合--> <property name="set"> <set> <value>lisi</value> <value>zhangsan</value> <value>wangwu</value> </set> </property> <!--配置成员属性:Map集合--> <property name="map"> <map> <entry key="country" value="china"></entry> <entry key="province" value="hunan"></entry> <entry key="city" value="huaihua"></entry> </map> </property> <!--配置成员属性:Properties对象--> <property name="properties"> <props> <prop key="name">hyl</prop> <prop key="age">18</prop> <prop key="sex">male</prop> </props> </property> </bean> <!--配置实体类User对象的bean--> <!--为了测试--> <bean id="user" class="com.fs.entity.User"></bean> <bean id="use1" class="com.fs.entity.User"></bean> <bean id="use2" class="com.fs.entity.User"></bean> </beans>
5、测试类(MainApp)。
- 使用ApplicationContext容器加载配置文件。再调用容器对象的getBean()方法获取"UserDaoImpl"类的实例化bean。通过该bean对象调用save()方法。save()方法中打印配置文件注入每一个被注入的成员属性。
javapackage com.fs.test; import com.fs.dao.impl.UserDaoImpl; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { //使用IoC容器(ApplicationContext)获取spring容器管理的bean对象 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springC.xml"); //2.通过<bean>标签的唯一标识id获取配置的bean对象 Object obj = context.getBean("userDao"); //强制转换 UserDaoImpl userDao = (UserDaoImpl) obj; //调用UserDaoImpl中的save方法 userDao.save(); } }
6、查看执行结果。(对应成员变量成功注入!)
- 不必多言。标签使用对,属性设置对,就不会出问题。