1.Druid数据源对象管理
- 导入坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
- 配置文件
<!-- 管理DruidDataSource对象-->
<bean class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql..cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</bean>
2.c3p0数据源对象管理
- 导入坐标(可以在maven仓库官网中搜素
https://mvnrepository.com/
)
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
- 配置文件(注意通过Ctrl+F12查看是否有构造方法注入,没有则通过setter注入,也可以自行百度用法)
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql..cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
<property name="user" value="root"/>
<property name="password" value="12345678"/>
</bean>
3.加载配置文件
- 开启context命名空间–(复制部分代码,要修改5个地方,都是修改成context)
<!-- 1.开启context命名空间-->
<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命名空间,加载指定properties文件
<!-- 2.使用context空间加载properties文件-->
<context:property-placeholder location="jdbc.properties"/>
- 使用
${ }
读取加载的属性值
<bean 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>
- 注意配置文件环境变量和配置文件中的字段相同时,一般系统环境变量优先级大于配置文件,此时需要禁用系统变量
<!-- 2.使用context空间加载properties文件-->
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
- 加载多个配置文件中间用逗号隔开
<!-- <context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>-->
<context:property-placeholder location="jdbc.properties ,jdbc2.properties" system-properties-mode="NEVER"/>
或者使用通配符
<context:property-placeholder location="*.properties " system-properties-mode="NEVER"/>
然而有个规范,就是前面要加classpath:
<context:property-placeholder location="classpath:*.properties " system-properties-mode="NEVER"/>
要读取导入类路劲与jar包下的properties文件:
<context:property-placeholder location="classpath*:*.properties " system-properties-mode="NEVER"/>
4.创建容器
- 方式一:类路径加载配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
- 方式二:文件路径加载配置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("F:\\Java\\studynote\\后端\\SSM\\spring_10_container\\src\\main\\resources\\applicationContext.xml");
- 加载多个配置文件
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean1.xml","bean2.xml");
5.获取bean
- 方式一:使用bean名称获取
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
- 方式二:使用bean名称获取并指定类型
BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
- 方式三:使用bean类型获取
BookDao bookDao = ctx.getBean(BookDao.class);
6.容器
- BeanFactory是顶层接口
- ApplicationContext是常用接口
- ConfigurableApplicationContext提供关闭容器功能
- ClassPathXmlApplicationContext常用实现类
7.BeanFactory初始化(了解)
- 类路径加载配置文件
public static void main(String[] args) {
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resource);
BookDao bookDao = bf.getBean("bookDao", BookDao.class);
bookDao.save();
}
- BeanFactory创建完毕后,所有的bean均为延迟加载,相当于在xml配置文件里面添加
lazy-init="true"
的属性
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" lazy-init="true">
</bean>
8.核心容器总结
bean相关
<bean
id="bookDao" bean的ID
name="dao booDaoImpl daoImpl" bean的别名
class="com.itheima.dao.impl.BookDaoImpl" bean类型,静态工厂类,FactoryBean类
scope="singleton" 控制bean的实例数量
init-method="init" 生命周期初始化方法
destory-method="destory" 生命周期销毁方法
autowire="byType" 自动装配类型
factory-method="getInstance" bean工厂方法,应用于静态工厂或实例工厂
factory-bean="com.itheima.factory.BookDaoFactory" 实例工厂bean
lazy-init="true" 控制bean延迟加载
/>
依赖注入相关
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/> 构造器注入引用类型
<constructor-arg name="userDao" ref="userDao"/>
<constructor-arg name="msg" value="WARN"/> 构造器注入简单类型
<constructor-arg type="java.lang.String" index="3" value="WARN"/> 类型匹配与索引匹配
<property name="bookDao" ref="bookDao"/> setter注入引用类型
<property name="userDao" ref="userDao"/>
<property name="msg" value="WARN"/> setter注入简单类型
<propperty name="names"> setter注入集合类型
<list> list集合
<value>itcast</value> 集合注入简单类型
<ref bean="dataSource"/> 集合注入引用类型
</list>
</propperty>
</bean>