java从入门到精通二十七(Spring框架篇章二之第三方bean管理)

举报
兰舟千帆 发表于 2022/07/21 18:54:51 2022/07/21
【摘要】 @[TOC](java从入门到精通二十七(Spring框架篇章二) IOC和 DI管理第三方bean我们要用到的是控制反转和依赖注入这种理念来进行管理第三方bean。对的这是Spring里面非常典型的思想。我们回顾一下他们两个的定义。DI全程Dependency Injection,当某个java 实例需要另一个java实例时,创建被调用者的工作不是由调用者实现,而是由spring容器来完成...

@[TOC](java从入门到精通二十七(Spring框架篇章二)

IOC和 DI管理第三方bean

我们要用到的是控制反转和依赖注入这种理念来进行管理第三方bean。对的这是Spring里面非常典型的思想。

我们回顾一下他们两个的定义。

DI全程Dependency Injection,当某个java 实例需要另一个java实例时,创建被调用者的工作不是由调用者实现,而是由spring容器来完成,然后注入调用者,因此称为依赖注入。

Ioc全称Inversion of Control,把创建对象的权利交给容器,对象的实例不再由调用者来创建,而是由容器来创建,容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移带了容器,控制权发生了反转,这就是控制反转。它是spring框架的核心思想之一。

其实说的是一个概念,只是侧重点不一样。控制反转是原理,是一种思想,依赖注入呢,其实侧重于程序的具体实现。

现在我们去管理第三方的bean,而不是我们自己创建程序的bean。

我们还是从开始做起。先创建一个简单的模块。

在这里插入图片描述
然后呢。开始我们的准备工作。

首先我们在pom.xml添加Spring的依赖。

在这里插入图片描述
然后这样我们就可以创建到Spring的配置文件。

记得点这里。这样可以加载一下你导入的东西。
在这里插入图片描述
在这里插入图片描述

我们将它创建出来。
在这里插入图片描述
然后我们简单创建一个运行测试类。现在我们的代码还是比较少,所以我们不需要创建太多包结构。

在这里插入图片描述

这是我们目前的准备。

如果要对第三方bean管理,那么我们需要在pom文件导入第三方的东西。

管理Druid

这是阿里巴巴开发的一个开源的优秀的管理工具。更多情况我们把它叫做数据库连接池。首先我们来回顾数据库连接池做了那些事情。

数据库连接池是个容器,负责分配、管理数据库连接 (Connection)
它允许应用程序重复使用一个现有的数据库连接,而不是再 重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没 有释放数据库连接而引起的数据库连接遗漏

我们如果不适用数据库链接池的话,之前我们代码中使用连接是没有使用都创建一个Connection对象, 使用完毕就会将其销毁。这样重复创建销毁的过程是特别耗费计算 机的性能的及消耗时间的。

如果我们使用了数据库连接池

在这里插入图片描述

==连接池是在一开始就创建好了一些连接(Connection)对象存储起 来。用户需要连接数据库时,不需要自己创建连接,而只需要从连 接池中获取一个连接进行使用,使用完毕后再将连接对象归还给连 接池;这样就可以起到资源重用,也节省了频繁创建连接销毁连接 所花费的时间,从而提升了系统响应的速度==。

所以数据库连接池扮演这样的角色。之前我们都在代码中用过。

我们之前是这样获取到连接的。然后我们可以和后面的操作对比下。

Properties prop = new Properties();
prop.load(new FileInputStream(“jdbc- demo/src/druid.properties”));
获取连接池对象
DataSource dataSource =
DruidDataSourceFactory.createDataSource(prop);
获取数据库连接 Connection
Connection connection = dataSource.getConnection();

回顾完之后,然后我们开始去整合它吧

那么我们先添加依赖
在这里插入图片描述
然后我们在xml配置上它的bean,这样我们还是配置文件配置。这种配置模式我们在后面可以用注解取代。我们后面再说。
在这里插入图片描述

然后我们在代码中看看能否获取到IOC容器的bean对象。
在这里插入图片描述
在这里插入图片描述
我们可以成功获取到。

管理c3p0

添加依赖
在这里插入图片描述

pom坐标查询网站

然后我们去配置文件当中添加配置

在这里插入图片描述
然后我们尝试去获取到管理的bean

在这里插入图片描述

但是这样会报错。
在这里插入图片描述

这个连接池没有自带驱动啊!所以我们需要自己去导入依赖。
在这里插入图片描述
添加以后记得刷新加载

在这里插入图片描述
然后这样就可以了。

后面我们将按照注解简化开发的方式进行说明。更文较慢,学业繁忙。
未完续更。

属性注入(Spring读取properties文件配置)

我们所做的就是可以将数据库的链接信息存在一个文件当中,然后通过spring来加载。
具体的话还是很假单的。
可以在resources下创建这样的配置文件
在这里插入图片描述
我们可以这样去写
在这里插入图片描述
注意目录结构
在这里插入图片描述

然后怎么做呢?我们需要开启一个命名空间,具体的看下面。我把配置全部写在这里。

<?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/context  http://www.springframework.org/schema/beans/spring-content.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--
  class:告诉容器注册的是什么类,要写出注册组件的全类名。-->
    <context:property-placeholder location="jdbc.properties"></context:property-placeholder>


    <bean id="dataSource0" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>

    </bean>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/mysql?useSSL=false"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <bean id="datasource01" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mysql?useSSL=false"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123456"></property>
        <property name="maxPoolSize" value="1000"></property>
    </bean>


</beans>

具体的分析看下面。

在这里插入图片描述

这样我们就全部配置完毕。

需要注意的是 ==context:property-placeholder/ 标签会加载系统的环境变量,而且环境变量的值会被优先加载==

在这里我们的键值,在加载的时候很可能优先加载系统的username,而不是你自己配置的数据。

在这里插入图片描述

我们可以不让加载系统环境变量
在这里插入图片描述
未完续更。

加载配置多个properties

在这里插入图片描述
第一种
在这里插入图片描述

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

第二种

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

这样我们可以加载到配置文件

bean 属性

在这里插入图片描述

bean依赖注入

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。