自学内容网 自学内容网

Spring |(四)IoC/DI配置管理第三方bean

学习来源黑马程序员SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术

📚数据源对象管理

🐇环境准备

在这里插入图片描述

  1. pom.xml添加依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
    </dependencies>
  1. resources下添加spring的配置文件applicationContext.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">
    </beans>
  1. 编写一个运行类App
     public class App {
         public static void main(String[] args) {
             ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
         }
     }

🐇实现Druid管理

需求:使用Spring的IoC容器来管理Druid连接池对象。

  • 步骤1:导入druid的依赖,pom.xml中添加依赖。
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.16</version>
    </dependency>
  • 步骤2:配置第三方bean,在applicationContext.xml配置文件中添加DruidDataSource的配置。
    • driverClassName:数据库驱动
    • url:数据库连接地址
    • username:数据库连接用户名
    • password:数据库连接密码
    <?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">
        <!--管理DruidDataSource对象-->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </bean>
    </beans>
  • 步骤3:从IoC容器中获取对应的bean对象。
    public class App {
        public static void main(String[] args) {
           ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
           DataSource dataSource = (DataSource) ctx.getBean("dataSource");
           System.out.println(dataSource);
        }
    }
  • 步骤4:运行程序。
    在这里插入图片描述

🐇实现C3P0管理

需求:使用Spring的IoC容器来管理C3P0连接池对象。

  • 步骤1:导入C3P0的依赖。pom.xml中添加依赖。
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
  • 步骤2:配置第三方bean,在applicationContext.xml配置文件中添加配置(通过setter方式进行注入)。
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
        <property name="maxPoolSize" value="1000"/>
    </bean>
  • 步骤3:运行程序
    在这里插入图片描述

    • 报错ClassNotFoundException,意思是类没有发现的异常,具体的类为com.mysql.jdbc.Driver。错误的原因是缺少mysql的驱动包。解决方案:在pom.xml把驱动包引入。
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    
    • 重新运行
      在这里插入图片描述

📚加载properties文件

之前完成了两个数据源druidC3P0的配置。这两个数据源中都使用到了一些固定的常量,把这些值写在Spring的配置文件中不利于后期维护。需要将这些值提取到一个外部的properties配置文件中。

🐇第三方bean属性优化

需求:将数据库连接四要素提取到properties配置文件,spring来加载配置信息并使用这些信息来完成属性注入。

  • 步骤1:准备properties配置文件。resources下创建一个jdbc.properties文件,并添加对应的属性键值对。
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
    jdbc.username=root
    jdbc.password=root
    

    当有多个properties配置文件需要被加载时,就可以再建一个jdbc2.properties文件。

  • 步骤2:在applicationContext.xml中开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>
  • 步骤3:在配置文件中使用context命名空间下的标签来加载properties配置文件。

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

    ps:<context:property-placeholder/>标签会加载系统的环境变量,而且环境变量的值会被优先加载。解决方案:添加system-properties-mode="NEVER",表示不加载系统属性。

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

    ps:多个配置文件的导入↓

    <!--方式一:可以实现,如果配置文件多的话,每个都需要配置 -->
    <context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
    <!--方式二:*.properties`代表所有以properties结尾的文件都会被加载,可以解决方式一的问题,但是不标准-->
    <context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
    <!--方式三:标准的写法,`classpath:`代表的是从根路径下开始查找,但是只能查询当前项目的根路径 -->
    <context:property-placeholder location="classpath:*.properties" system-properties-mode="NEVER"/>
    <!--方式四:不仅可以加载当前项目还可以加载当前项目所依赖的所有项目的根路径下的properties配置文件-->
    <context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>
    
  • 步骤4:完成属性注入。使用${key}来读取properties配置文件中的内容并完成属性注入。

    <?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">
    
        <context:property-placeholder location="jdbc.properties"/>
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <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>
    </beans>

🐇读取单个属性

需求:从properties配置文件中读取key为name的值,并将其注入到BookDao中并在save方法中进行打印。

  • 步骤1:在项目中添对应的类。BookDao和BookDaoImpl类,并在BookDaoImpl类中添加name属性与setter方法。
    public interface BookDao {
        public void save();
    }
    
    public class BookDaoImpl implements BookDao {
        private String name;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void save() {
            System.out.println("book dao save ..." + name);
        }
    }
  • 步骤2:在applicationContext.xml添加配置,bean的配置管理读取外部properties依赖注入
    <?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">
    
        <context:property-placeholder location="jdbc.properties"/>
    
        <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
            <property name="name" value="${jdbc.driver}"/>
        </bean>
    </beans>
  • 步骤3:运行程序。在App类中,从IoC容器中获取bookDao对象,调用方法,查看值是否已经被获取到并打印控制台。
    public class App {
        public static void main(String[] args) throws Exception{
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            BookDao bookDao = (BookDao) ctx.getBean("bookDao");
            bookDao.save();
        }
    }

在这里插入图片描述


原文地址:https://blog.csdn.net/m0_63398413/article/details/143995086

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!