链接:https://www.baobeihuijia.com/bbhj/contents/3/192584.html
Spring Framework
SpringMVC
Mabatis
spring的核心IOC与DI
IOC实操(对象在容器的取与拿)
pom中需要导入spring坐标
在resources下配置spring,新建一个applicationContext.xml(相当于spring的IOC容器)
把类以bean的形式放入到spring容器中,起一个别名
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
获取bean
// 获取IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取bean
BookDao bookDao = (BookDao)ctx.getBean("bookDao");
bookDao.save();
BookServie bookservice = (BookServie)ctx.getBean("bookService");
DI实操(建立对象之间的依赖关系)
// 取出类内部new另一个类对象的代码
private BookDao bookDao;
// 改用set方法来描述,容器会根据配置将对象注入
public void setBookDao(BookDao bookDao){
this.bookDao = bookDao;
}
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"/>
改写为
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
// 第一个是set内的名字,ref后边是bean
<property name = "bookDao" ref="bookDao"/>
</bean>
修改单例为多例
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="singleton"/>
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/>
bean实例化的一些古老方法
依赖注入方式
setter注入(拿的时候写好属性和setter,存的时候要写好bean以及property)
引用类型
简单类型
<property name="databaseName" value="mysql"/>
构造器注入
引用类型
public BookServiceImpl(BookDao bookDao, UserDao userDao) {
this.bookDao = bookDao;
this.userDao = userDao;
}
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<constructor-arg name="userDao" ref="userDao"/>
<constructor-arg name="bookDao" ref="bookDao"/>
</bean>
简单类型
private String databaseName;
private String connectionNum;
public BookDaoImpl(String databaseName, String connectionNum) {
this.databaseName = databaseName;
this.connectionNum = connectionNum;
}
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<!--根据构造方法参数位置注入-->
<constructor-arg index="0" value="mysql"/>
<constructor-arg index="1" value="100"/>
</bean>
两种方式的选择
依赖自动装配(只能用于引用类型注入,不能简单类型)
集合注入:array list set map property
加载管理一个第三方资源
如果想要使用别的工具,那么需要pom中导入包,然后利用导入的类新建一个bean对象,就可以使用这些类工具了
连接池对象
在bean中读取配置文件:开启一个context命名空间,使用context加载properites文件
使用属性占位符读取properites文件
// 如果文件中的名字和系统的名字重复,那么需要在context读取的时候添加
<context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
// 加载全部properties
<context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
// 加载当前路径以及依赖的jar包的properties
<context:property-placeholder location="classpath*.properties" system-properties-mode="NEVER"/>
容器生命周期
容器加载
获取bean
beanFactory初始化bean(调用构造函数)会延时加载,而applicationcontext初始化bean会立即加载
容器关闭
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init",destory-mewthod="destory"/>
# 关闭容器才能执行对象的销毁操作
// 方法一
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.closee();
// 方法二:关闭钩子
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.registerShutdownHook();
流程(bean对象仍然为普通对象,也会通过垃圾回收机制收集)
象仍然为普通对象,也会通过垃圾回收机制收集)
- 初始化容器
- 当 Spring 容器启动时,它会读取配置文件并实例化容器中的所有对象Bean,调用构造方法,根据方法区的字节码创建对象
- 执行属性注入setter
- 容器中该bean的init
- 如果遇到关闭销毁容器,则执行bean的销毁方法