Spring framework之配置文件实现容器和连接池注入

容器注入:

 我们先在实现类中写好对应的set方法

package org.example.dao.impl;

import org.example.dao.bookDao;

import java.util.*;

public class bookDaoImpl4 implements bookDao {

    private int[] array;
    private List<String> list;
    private Set<String> set;
    private Map<String,String> map;
    private Properties properties;


    public void setArray(int[] array) {
        this.array = array;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    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("bookDao....");
        System.out.println("array"+array);
        System.out.println("list"+list);
        System.out.println("set"+set);
        System.out.println("map"+map);
        System.out.println("properties"+properties);
    }
}

 array:

<bean id="bookDao4" class="org.example.dao.impl.bookDaoImpl4">
        <property name="array">
            <array>
<!--                简单类型-->
                <value>100</value>
                <value>200</value>
                <value>300</value>
<!--                引用类型-->
<!--                <ref bean=""/>-->
            </array>
        </property>
</bean>

简单类型数据直接用value标签写入数据。引用类型用ref标签bean属性指明哪个bean。

list:

<bean id="bookDao4" class="org.example.dao.impl.bookDaoImpl4">
        <property name="list">
            <list>
                <value>ujbuk</value>
                <value>nbjk</value>
                <value>yhj</value>
            </list>
        </property>
</bean>

set:

<bean id="bookDao4" class="org.example.dao.impl.bookDaoImpl4">
        <property name="set">
            <set>
                <value>ujbuk</value>
                <value>nbjk</value>
                <value>yhj</value>
            </set>
        </property>
</bean>

map:

<bean id="bookDao4" class="org.example.dao.impl.bookDaoImpl4">
        <property name="map">
            <map>
                <entry key="country" value="China"/>
                <entry key="province" value="hebei"/>
                <entry key="city" value="hengshui"/>
            </map>
        </property>
</bean>

因为map是管理键值对的,所以不能直接用value标签,应该用ertry标签的key和value属性分别声明对应的键名和值。

properties:

   <bean id="bookDao4" class="org.example.dao.impl.bookDaoImpl4">
        <property name="properties">
            <props>
                <prop key="country">China</prop>
                <prop key="province">hebei</prop>
                <prop key="city">hengshui</prop>
            </props>
        </property>
    </bean>

数据库连接池:我们先导入下面数据库连接池所需要的依赖包

<!--        下面俩个都是做连接池的 ,这俩个数据连接池不太一样-->
<!--        Druid自带驱动,c3p0需要我们自己手动添加驱动-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
<!--        c3p0所需驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

Druid数据库连接池:

     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
         <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://localhost:3306/mysql/>
         <property name="username" value="root"/>
         <property name="password" value="root"/>
     </bean>

c3p0数据库连接池:

     <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource">
         <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mysql/db.brand"/>
         <property name="user" value="root"/>
         <property name="password" value="quwenhao"/>
     </bean>

我们也可以用资源配置文件来代替其中的具体的driverClass,url,username和password。导入资源配置文件的话需要我们在spring配置文件中新开出一个空间:

 1、开启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>    

xmlns:context=意思是开了一个新的命名空间NameSpace,叫做context。其=后面的是复制的xmlns="http://www.springframework.org/schema/beans",然后把其中的beans改成context。

然后把xsi:schemaLocation中的俩个http都复制一份,在把其中所有的beans都改成context。完成该操作我们就可以使用该空间了。

 2、使用context空间加载properties文件

<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>

system-properties-mode="NEVER"意思是不加载系统属性,用于解决自己写的配置资源中的变量名与系统本身的变量名相同而产生的冲突。

同时配置多个properties文件:

<context:property-placeholder location="jdbc.properties,jdbc2.properties"/>
<!-- 或者<context:property-placeholder location="*.properties"/>   -->

最规范的格式:

<context:property-placeholder location="classpath:*.properties"/> 
<!-- 这种格式只能读取当前项目中的配置文件-->
<!--    从路径中或jar包中搜索并加载properties文件-->
<!--  <context:property-placeholder location="classpath*:*.properties"/>  -->

这样就可以导入配置文件了:

<bean class="com.alibaba.druid.pool.DruidDataSource">
        <!--        使用占位符${}读取properties文件中的属性-->
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>