spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))

目录

一、单个字符串或对象引用的注入。

(1)简单案例演示。

1、项目的基本结构和类介绍。

2、接口"UserDao"代码。

3、实现类"UserDaoImpl"代码。

4、spring配置文件。

5、测试类(MainApp)。

6、查看执行结果。(对应成员变量成功注入!)

二、集合类型(对象)注入。

(1)XMind图解。(格式和基本用法)

(2)简单案例演示。

1、项目的基本结构和类介绍。

2、接口"UserDao"代码。

3、实现类"UserDaoImpl"代码。

4、spring配置文件。(此处重点)

5、测试类(MainApp)。

6、查看执行结果。(对应成员变量成功注入!)


一、单个字符串或对象引用的注入。

(1)简单案例演示。
1、项目的基本结构和类介绍。
  • 在UserDaoImpl实现类中。拥有两个成员属性(字符串类型与引用类型(对象))。提供对应的setter方法。提供save()方法,且方法中打印字符串类型与引用类型(对象)的数据。
  • 测试时:通过容器对象获取spring容器管理的"UserDaoImpl"的实例化对象。再调用本身的save方法。save()方法再执行其他逻辑。
  • pom.xml文件中引入spring-context的依赖坐标。


2、接口"UserDao"代码。
  • 提供抽象方法save()。实现类"UserDaoImpl"再去实现save()方法。
java 复制代码
package com.fs.dao;

public interface UserDao {
    //UserDao的save方法
    void save();
}
3、实现类"UserDaoImpl"代码。
  • 实现接口"UserDao"并实现其save()方法。
  • 提供成员变量(str(字符串)、user(对象))。且提供相应的setter方法。使用注入的方式获取对应的值和实例化bean。
java 复制代码
package 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()方法。
java 复制代码
package 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()方法。
java 复制代码
package com.fs.dao;

public interface UserDao {
    //UserDao的save方法
    void save();
}
3、实现类"UserDaoImpl"代码。
  • 同样实现接口"UserDao"并实现其save()方法。
  • 创建需要测试的数组与几个集合的成员变量。并提供相应的setter方法。以便完成相应的值的注入!


  • save()方法除了打印自身需要的外,还需要依次打印对应的数组和几个集合对象的值。因为要测试是否成功的依靠配置文件(spring.xml)完成注入!
java 复制代码
package 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()方法中打印配置文件注入每一个被注入的成员属性。
java 复制代码
package 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、查看执行结果。(对应成员变量成功注入!)
  • 不必多言。标签使用对,属性设置对,就不会出问题。
相关推荐
番薯大佬13 小时前
Python学习-day8 元组tuple
java·python·学习
何似在人间57513 小时前
Go语言快速入门教程(JAVA转go)——1 概述
java·开发语言·golang
wanzhong233313 小时前
ArcGIS学习-17 实战-密度分析
学习·arcgis
疯子@12314 小时前
nacos1.3.2 ARM 版容器镜像制作
java·linux·docker·容器
Swift社区14 小时前
如何解决 Spring Bean 循环依赖
java·后端·spring
我真的是大笨蛋14 小时前
从源码和设计模式深挖AQS(AbstractQueuedSynchronizer)
java·jvm·设计模式
知识分享小能手14 小时前
React学习教程,从入门到精通,React 组件生命周期详解(适用于 React 16.3+,推荐函数组件 + Hooks)(17)
前端·javascript·vue.js·学习·react.js·前端框架·vue3
Pretend° Ω14 小时前
LRU缓存详解:用C语言实现高效数据管理
运维·c语言·spring·缓存·lru·双向链表
空山新雨(大队长)15 小时前
Java第五课:输入输出
java·开发语言
白云如幻15 小时前
【Java】QBC检索和本地SQL检索
java·数据库·sql