06Spring - Spring依赖注入(基于XML)

简介: 06Spring - Spring依赖注入(基于XML)

Spring依赖注入

依赖注入的概念

它是Spring框架核心IOC的具体实现方式。简单的说,就是坐等框架把对象传入,而不用我们自己去获取。

1)构造函数注入(constructor-arg标签)

通过配置的方式,给构造函数的成员变量赋值。

代码:

public class CustomerServiceImpl implements ICustomerService{
    private String name;
    private Integer age;
    private Date birthday;
    public CustomerServiceImpl(String name, Integer age, Date birthday) {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }
    @Override
    public void saveCustomer() {
    }
}

配置如下:

<bean id="customerService" class="com.service.impl.CustomServiceImpl">
  <constructor-arg name="name" value="张三"></constructor-arg>
  <constructor-arg name="age" value="18"></constructor-arg>
  <constructor-arg name="birthday" value="now"></constructor-arg>
</bean>
<bean id="now" class="java.util.Date"></bean>

配置解析:

index:指定参数在构造函数参数列表的索引位置

type: 指定参数在构造函数中的数据类型

name: 指定参数在构造函数的名称

value:它能赋的值是其它的bean类型,也就是说,必须得是在配置文件中配置过的bean

2)set方法注入(property标签)

代码:

public class CustomerServiceImpl implements ICustomerService{
    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;
    }
    @Override
    public void saveCustomer() {
    }
}

配置如下:

<bean id="customerService" class="com.service.impl.CustomServiceImpl">
  <property name="name" value="张三"></constructor-arg>
  <property name="age" value="18"></property>
  <property name="birthday" value="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>

配置解析:

name: 找的是类中set方法后面的部分

value:给属性赋值是基本数据类型和String类型的

ref:给属性复制是其它的bean类型

3)使用p名称空间注入数据(p标签)

这种方式是通过在xml中导入p空间名称,使用p:propertyName 来注入数据,它的本质仍然是调用类中的set方法实现注入功能。

代码:

public class CustomerServiceImpl implements ICustomerService{
    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;
    }
    @Override
    public void saveCustomer() {
    }
}

配置如下:

4)注入集合属性

代码:

package cn.itcast.domain;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class CollBean 
{
  public CollBean()
  {
    System.out.println(11111);
  }
  private String[] ss;
  private List ll;
  private Map mm;
  private Properties properties; //键值对
  public void setSs(String[] ss) {
    this.ss = ss;
  }
  public void setLl(List ll) {
    this.ll = ll;
  }
  public void setMm(Map mm) {
    this.mm = mm;
  }
  public void setProperties(Properties properties) {
    this.properties = properties;
  }
  @Override
  public String toString() {
    return "CollBean [ss=" + Arrays.toString(ss) + ", ll=" + ll + ", mm=" + mm + ", properties=" + properties + "]";
  }
}

配置文件:

<bean id="collBean" class="cn.itcast.domain.CollBean">
         <property name="ss">
            <!-- 数组类型 -->
            <list>
              <value>aaa</value>
              <value>bbb</value>
              <value>ccc</value>
            </list>
         </property>
         <property name="ll">
            <!-- list类型  -->
            <list>
              <value>111</value>
              <value>222</value>
              <ref bean="car"/>
            </list>
         </property>
         <property name="mm">
          <!-- map -->
          <map>
            <entry key="k1" value="aaa"></entry>
            <entry key="k2" value="bbbb"></entry>
            <entry key="k3" value-ref="car"></entry>
          </map>
         </property>
         <property name="properties">
          <!-- properties类型 -->
          <props>
            <prop key="hibernate.username">root</prop>
            <prop key="hibernate.password">1234</prop>
          </props>
         </property>
       </bean>
目录
相关文章
|
1月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
84 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
5月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
47 1
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
212 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
4月前
|
XML Java 测试技术
Spring Boot中的依赖注入和控制反转
Spring Boot中的依赖注入和控制反转
|
2月前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
79 0
|
3月前
|
XML Java 数据格式
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
这篇文章详细介绍了Spring框架中IOC容器的Bean管理,特别是基于XML配置方式的实现。文章涵盖了Bean的定义、属性注入、使用set方法和构造函数注入,以及如何注入不同类型的属性,包括null值、特殊字符和外部bean。此外,还探讨了内部bean的概念及其与外部bean的比较,并提供了相应的示例代码和测试结果。
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
3月前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解