天天看点

基于XML配置文件方式实现Bean的管理一、基于XML方式创建对象二、基于XML方式注入属性三、XML注入其他类型属性四、XML注入集合属性五、XML自动装配六、外部属性文件

Bean的管理 = 创建对象(XML、注解) + 注入属性(构造器、set方法)

一、基于XML方式创建对象

<!--配置User对象创建-->
    <bean id="User" class="spring5.User"></bean>
           

使用

bean

标签可以实现对象的创建,其中

id

属性是唯一标识,

class

属性是类全路径。创建对象的时候,默认执行五参数构造方法。

二、基于XML方式注入属性

依赖注入(DI)

通过DI来实现注入属性,需要在创建对象的基础之上来完成。DI是IOC的一种具体实现。

  • 使用含参

    构造方法

    进行注入

创建

构造器方法

方法

public User(String name) {
        this.name = name;
    }
           

在spring配置文件中进行配置

<!--用含参构造方法注入属性-->
    <bean id="User" class="spring5.User">
        <constructor-arg name="name" value="张三"></constructor-arg>
    </bean>
           
  • 使用

    set

    方法进行注入

创建

set

方法

public void setName(String name) {
        this.name = name;
    }
           

在spring配置文件配置对象创建,配置属性注入

<!--set方法注入属性-->
    <bean id="User" class="spring5.User">
        <!--使用property完成属性注入-->
        <property name="name" value="张三"></property>
    </bean>
           
  • p

    名称空间注入

可以简化基于xml配置方式,首先在配置文件中添加p名称空间

xmlns:p="http://www.springframework.org/schema/p"
           

然后属性注入

最后测试三种属性的注入

@Test
    public void test1(){

        //1.加载Spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("userBean.xml");

        //2.获取配置创建的对象
        User user = context.getBean("User", User.class);
        System.out.println(user);
        System.out.println(user.getName());

    }
           

输出结果:

基于XML配置文件方式实现Bean的管理一、基于XML方式创建对象二、基于XML方式注入属性三、XML注入其他类型属性四、XML注入集合属性五、XML自动装配六、外部属性文件

三、XML注入其他类型属性

注入字面量

<property name="name">
            <!--将属性name设置为null值-->
            <null></null>
        </property>
           
<!--属性值中包含特殊符号
            1.可以使用转义字符
            2.可以把特殊符号内容写到CDATA
        -->
        <property name="name">
            <value><![CDATA[<<张三>>]]]></value>
        </property>
           

注入外部bean

<!--创建service和dao对象-->
    <bean id="userService" class="spring5.service.UserService">
        <!--service对象中注入dao对象属性
            name: 类里面属性的名称
            ref: 创建userDao对象bean标签的id值
        -->
        <property name="userDao" ref="userDaoImpl"></property>
    </bean>

    <bean id="userDaoImpl" class="spring5.dao.UserDaoImpl"></bean>
           

注入内部bean

<!--内部bean-->
    <bean id="emp" class="spring5.bean.Emp">
        <property name="ename" value="aaa"></property>
        <property name="gender" value="男"></property>

        <property name="dept">
            <bean id="dept" class="spring5.bean.Dept">
                <property name="dname" value="bbb"></property>
            </bean>
        </property>
    </bean>
           

注入属性级联赋值

<!--级联赋值-->
    <bean id="emp" class="spring5.bean.Emp">
        <property name="ename" value="aaa"></property>
        <property name="gender" value="男"></property>
        <!--通过ref属性实现级联赋值-->
        <property name="dept" ref="dept"></property>
        <!--也可以直接dept.name实现级联赋值,要是get方法-->
        <property name="dept.dname" value="ddd"></property>
    </bean>

    <!--外部创建对象并赋值-->
    <bean id="dept" class="spring5.bean.Dept">
        <property name="dname" value="ccc"></property>
    </bean>
           

四、XML注入集合属性

创建对象

<bean id="student" class="collectionType.Student">

</bean>
           

注入数组类型属性

<!--数组类型属性注入-->
        <property name="courses">
            <array>
                <value>java</value>
                <value>C++</value>
            </array>
        </property>
           

注入

List

集合类型属性

<!--list类型属性注入-->
        <property name="list">
            <list>
                <value>张三</value>
                <value>李四</value>
            </list>
        </property>
           

注入

Map

集合类型属性

<!--map类型属性注入-->
        <property name="map">
            <map>
                <entry key="java" value="JAVA"></entry>
                <entry key="php" value="PHP"></entry>
            </map>
        </property>
           

注入

Set

集合类型属性

<!--set类型属性注入-->
        <property name="set">
            <set>
                <value>MySQL</value>
                <value>Redis</value>
            </set>
        </property>
           

在集合里面设置对象类型值

<!--创建多个course对象-->
    <bean id="course1" class="collectionType.Course">
        <property name="cname" value="课程1"></property>
    </bean>
    <bean id="course2" class="collectionType.Course">
        <property name="cname" value="课程2"></property>
    </bean>


        <!--注入list集合类型,值为对象-->
        <property name="courseList">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
           

把集合注入部分提取出来变成通用部分

在 spring 配置文件中引入名称空间

util

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd ">

           

使用

util

标签完成

list

集合注入提取

<!--提取list集合类型属性注入-->
    <util:list id="courseList">
        <value>课程1</value>
        <value>课程2</value>
        <value>课程3</value>
    </util:list>

    <!--提取list集合类型属性注入使用-->
    <bean id="Student" class="collectionType.Student">
        <property name="courseList" ref="courseList"></property>
    </bean>
           

五、XML自动装配

根据指定的装配规则,按照属性名称或者属性类型,Spring可以自动的将匹配的属性值进行注入

根据属性名称自动注入

<!--实现自动装配
     bean 标签属性 autowire,配置自动装配
     autowire 属性常用两个值:
     byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
     byType 根据属性类型注入
    --> 
    <bean id="emp" class="autowire.Emp" autowire="byName">
        <!--手动装配-->
        <!--<property name="dept" ref="dept"></property>-->
    </bean>
    <bean id="dept" class="autowire.Dept"></bean>
           

根据属性类型自动注入

<!--实现自动装配
     bean 标签属性 autowire,配置自动装配
     autowire 属性常用两个值:
     byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样
     byType 根据属性类型注入
    -->
    <bean id="emp" class="autowire.Emp" autowire="byType">
        <!--手动装配-->
        <!--<property name="dept" ref="dept"></property>-->
    </bean>
    <bean id="dept" class="autowire.Dept"></bean>
           

六、外部属性文件

直接配置数据库信息

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!--直接配置连接池-->

        <!-- dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            set方法注入
        -->
        
        <!--<property name="driverClassName" value="com.mysql.jdbc.driver"></property>-->
        <!--<property name="url" value="jdbc:mysql://localhost:3306/userDB"></property>-->
        <!--<property name="username" value="root"></property>-->
        <!--<property name="password" value="root"></property>-->
</bean>
           

引入外部属性文件配置数据库连接池

创建

properties

格式外部属性文件,写入数据库信息

prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/userDB
prop.username=root
prop.password=root
           

把外部

properties

属性文件引入到Spring配置文件中

首先要引入

context

名称空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


</beans>
           

在Spring配置文件使用标签引入外部属性文件

<!--引入外部属性文件-->
        <context:property-placeholder location="classpath:jdbc.properties"/>

        <!-- dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            set方法注入
        -->
        <!-- 获取properties文件内容,根据key获取,使用spring表达式获取 -->
        <property name="driverClassName" value="${jdbc.driverclass}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>