一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
- 📝 个人主页:程序员阿红🔥
- 🎉 支持我:点赞👍收藏⭐️留言📝
- 🍓欢迎大家关注哦,互相学习🍓
- 🍋欢迎大家访问哦,互相学习🍋
- 🍑欢迎大家收藏哦,互相学习🍑
1.介绍
需求:借助spring的IOC实现service层与dao层代码解耦合
步骤分许:
- 创建java项目,导入spring开发基本坐标
- 编写Dao接口和实现类
- 创建spring核心配置文件
- 在spring配置文件中配置 UserDaoImpl
- 使用spring相关API获得Bean实例
2.实现
(1)创建java项目,导入spring开发基本坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
(2)编写Dao接口和实现类
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("保存成功了...");
}
}
(3)创建spring核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 在spring配置文件中配置UserDaoImpl
id:唯一标识
class:类全路径
-->
<bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl"></bean>
</beans>
(4)使用spring相关API获得Bean实例
@Test
public void UserTest(){
//获取到Spring上下文对象,借助上下文对象可以获取IOC容器的bean对象
// 1.底层利用dom4j解析applicationContext.xml文件
// 2.根据传入的bean对象id参数实例化该对象
// 3.利用该对象调用save方法。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
(5)运行结果
Spring相关API
- Spring的API体系异常庞大,我们现在只关注两个BeanFactory和ApplicationContext
- 紫色部分:全都是接口
- 浅绿色:抽象类
- 绿色:具体的实现类
(1)BeanFactory
BeanFactory是 IOC 容器的核心接口,它定义了IOC的基本功能。
- 特点:在第一次调用getBean()方法时,创建指定对象的实例。
@Test
public void test2(){
// 核心接口,不会创建bean对象存到容器中
BeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
//getBean的时候才真正创建bean对象
IUserDao userDao = (IUserDao) xmlBeanFactory.getBean("userDao");
userDao.save();
}
(2)ApplicationContext
代表应用上下文对象,可以获得spring中IOC容器的Bean对象。
-
特点:在spring容器启动时,加载并创建所有对象的实例
@Test public void UserTest(){ //获取到Spring上下文对象,借助上下文对象可以获取IOC容器的bean对象 // 1.底层利用dom4j解析applicationContext.xml文件 // 2.根据传入的bean对象id参数实例化该对象 // 3.利用该对象调用save方法。 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); }
两者的区别就是创建实例对象的时机不一样。
(3)其他常用实现类
- ClassPathXmlApplicationContext 它是从类的根路径下加载配置文件 推荐使用这种。
- FileSystemXmlApplicationContext 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
- AnnotationConfigApplicationContext 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
@Test
public void test1(){
// 获取到了spring上下文对象,借助上下文对象可以获取到IOC容器中的bean对象 ,加载的同时就创建了bean对象存到容器中
ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//ApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("D:\spring_code\spring_quickstart\src\main\resources\applicationContext.xml");
// 使用上下文对象从IOC容器中获取到了bean对象
// 1.根据beanid在容器中找对应的bean对象
//IUserDao userDao = (IUserDao) classPathXmlApplicationContext.getBean("userDao");
// 2.根据类型在容器中进行查询:有可能报错的情况:根据当前类型匹配到多个实例
IUserDao userDao = classPathXmlApplicationContext.getBean("userDao",IUserDao.class);
// 调用方法
userDao.save();
}
(4)常用方法
- Object getBean(String name); 根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。
- T getBean(Class requiredType); 根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错。
- T getBean(String name,Class requiredType); 根据Bean的id和类型获得Bean实例,解决容器中相同类型Bean有多个情况
(5)知识小结
ApplicationContext app = new ClasspathXmlApplicationContext("xml文件");
app.getBean("id");
app.getBean(Class);
🍗🍗🍗 完结撒花
💖💖💖写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧
👍👍👍 路漫漫其修远兮,吾将上下而求索