java从入门到精通二十七(Spring框架篇章二之第三方bean管理)
@[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
添加依赖
然后我们去配置文件当中添加配置
然后我们尝试去获取到管理的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依赖注入
- 点赞
- 收藏
- 关注作者
评论(0)