1、管理第三方bean:这里的管理第三方bean,其实就是导入druid jar,从而获取DruidDataSource对象,也就是管理第三方bean,而这个对象正是可以获取数据库连接池,因此我们需要再导入mysql jar包,与数据库创建连接。
ioc.xml
<!--
调用第三方的bean
这里调用的是阿里巴巴开发的druid中的DruidDataSource数据连接池,从而连接数据库
-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="url" value="jdbc:mysql://localhost:3306/green"></property>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
</bean>
项目是使用maven,所以在此之前需要导入pom依赖,需导入druid1.2.8以及mysql8.0.21的jar包。
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
下面是测试类:
MyTest.class
DruidDataSource dataSource = applicationContext.getBean("dataSource", DruidDataSource.class);
System.out.println(dataSource);
System.out.println(dataSource.getConnectCount());
2、引入外部配置文件
在与数据库连接的bean中,若需要更改数据库连接信息,则需不断的更改配置信息,若把与数据库连接的信息分离出来,达到低耦合,文件更改也方便,因此便引入了外部配置文件。
(1)在ioc.xml同目录下创建db.properties文件。
(2)将数据库连接属性写入配置文件
username=root123
password=root
url=jdbc:mysql//localhost:3306/green
driverClassName=com.mysql.cj.jdbc.Driver
(3)在ioc.xml头文件信息中引入context标签以及调用context标签获取连接
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="...http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
<!--调用context标签-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
<!--通过context标签所连接的配置文件获取属性信息-->
<bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="url" value="${url}"></property>
<property name="driverClassName" value="${driverClassName}"></property>
</bean>
在bean标签获取的username的值时,需要读取配置文件,而读取配置文件会默认读取系统某些环境变量的配置,因此可能存在名字冲突,便会获取到其他的值,可以在配置文件中可以添加前缀,以区分。
3、基于xml文件的自动装配
<!--
自动装配:将某些bean注入到另外的bean中,使用autowire属性
default/no:不装配
byName:按照id来实现自动装配,根据set方法后面的名称首字母小写决定的,若有多个,会选择默认第一个
byType:根据bean的类型决定的,若有多个类型就会报错
constructor:按照构造器进行装配,首先按照类型进行配置,如果有多个类型相同的bean,在按照id去进行判断
?????
-->
<bean class="com.msb.bean.Address">
<property name="province" value="广东"></property>
<property name="city" value="广州"></property>
<property name="town" value="增城"></property>
</bean>
<bean id="person8" class="com.msb.bean.Person" autowire="constructor"></bean>
4、spEL表达式语言
<!--spEL表达式语言-->
<bean id="person9" class="com.msb.bean.Person">
<!--引入外部bean-->
<property name="address" value="#{address}"></property>
<!--引入外部bean属性-->
<property name="name" value="#{address.province}"></property>
<!--支持运算符的所有操作-->
<property name="age" value="#{12+3}"></property>
<!--可以调用静态方法-->
<property name="grender" value="#{T(java.util.UUID).randomUUID().toString().substring(0,5)}"></property>
<!--可以调用非静态方法-->
<property name="hobbies" value="#{address.getCity()}"></property>