千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  Spring到底是如何通过ioc思想管理Bean的呢?

Spring到底是如何通过ioc思想管理Bean的呢?

来源:千锋教育
发布人:lxl
时间: 2023-04-04 14:24:35

  每次管理Bean,我们都通过这种工厂+反射的机制实现,也很麻烦。现在是时候揭开Spring管理Bean的谜底了,这也就是Spring的ioc思想!Spring到底是如何通过ioc思想管理Bean的呢?接下来我们来细细分解。

  一. Spring IOC入门案例的搭建

  在搭建入门案例之前,首先我们需要明确什么是IOC?IOC(Inversion of Control),俗称控制反转,它是一种设计思想,将对象创建的权利交给Spring去做,而非对象直接通过我们程序员手动的去new。

  接下来文哥带领大家搭建一个简单的ioc入门案例,体会一下Spring的如何帮助我们管理Bean的,基于这个案例仔细体会IOC的概念。其实Spring管理Bean的方式和我们上一节基于工厂+反射管理Bean的手法是一样的,只不过Spring做的粒度更加细腻!

  1. 创建maven工程,导入Spring的依赖

  首先我们创建一个普通的maven工程,然后导入Spring的核心依赖Spring-context,这个依赖是构建Spring项目环境的基础。

  org.springframework

  spring-context

  5.2.0.RELEASE

  注意:Spring-context是整个Spring环境的核心依赖,它包含很多子依赖,那么这些子依赖有哪些作用。

  2. 创建Dao接口和实现类

  我们创建一个接口和实现类,模拟对数据库进行操作。后续我们想让Spring框架帮助我们将接口实现类所属的Bean管理起来。

  2.1 Dao接口

  我们定义一个模拟操作用户模块的dao接口及其实现类,在这里只模拟一个新增用户的方法,并不真正的对数据库进行操作。

  public interface UserDao {

  public void addUser();

  }

  2.2 创建Dao接口的实现类

  我们定义一个实现类,对Dao接口进行实现。

  public class UserDaoImpl implements UserDao {

  public void addUser() {

  System.out.println("基于JDBC对新增用户的方法进行实现");

  }

  }

  3. 创建业务接口和实现类

  我们再定义一个模拟操作用户模块的业务接口及其实现类。注意:暂时不对dao接口进行调用。

  3.1 创建业务接口

  创建一个业务接口,这个接口主要定义了实现新增用户的方法。

  public interface UserService {

  public void addUser();

  }

  3.2 创建业务接口实现类

  创建一个业务接口实现类,这个业务接口实现类我们暂时不去调用Dao接口中的方法。

  public class UserServiceImpl implements UserService {

  public void addUser() {

  System.out.println("userService方法被实现了.....");

  }

  }

  到目前我们分别定义了dao接口的实现类,还有就是service的实现类。后续我们想让Spring框架帮助我们对这两个实现类进行管理。

  如何让Spring帮助我们管理Bean呢?接下来我们先创建Spring的配置文件。

  4. 创建Spring的配置文件

  我们通过IDEA创建Spring的配置文件(applicationContext.xml)。

  4.1 定义配置信息

  在Spring的配置文件中我们定义如下:

  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">

  这个配置文件里面的配置信息到底是什么意思?接下来文哥给大家详细解读一下:

  4.2 详解配置信息

  现在文哥对这个配置文件里面的标签和属性进行详细讲解。

  applicationContext.xml

  Spring的配置文件,名称可以自定义,也有叫Bean.xml的。作用类似于我们上一节自己定义的Bean.properties配置文件。

  Bean标签

  管理Bean的标签。Spring底层会通过dom4j的技术解析xml中的Bean标签,然后获取Bean的详细信息,比如Bean的名称,还有Bean所属类的全限定名。

  id属性

  Bean的名字。自定义,但是id的值必须唯一!

  class属性

  Bean所属类的全限定名,也就是包名+类名。

  到这里,详细各位小伙伴对这个配置文件的配置信息非常明白了,现在我们就来测试,看看Spring有没有帮助我们管理Bean。

  二. 测试入门案例

  1. 创建测试类

  接下来我们创建测试类,来测试Spring容器管理的Bean能不能成功获取。

  1.1 引入Junit依赖

  我们编写一个junit单元测试类,来尝试从Spring容器中获取Bean,看能不能拿到Bean。所以我们先要在项目的pom.xml中引入junit的依赖:

  junit

  junit

  4.13

  test

  1.2 创建Junit测试类

  我们创建一个Junit测试类,专门用来从Spring容器中获取Bean。

  public class TestBean {

  @Test

  public void test01(){

  //获取spring的容器 IOC(将对象创建的权利交给spring来管理)容器

  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  //根据bean的名称获取

  UserDao userDao = (UserDao) context.getBean("userDao");

  System.out.println(userDao);

  userDao.addUser();

  UserService userService = (UserService) context.getBean("userService");

  System.out.println(userService);

  userService.addUser();

  }

  }

  2. 详解测试类

  这个测试类到底是什么意思呢?接下来文哥给大家详细解释清楚。

  ApplicationContext

  Spring容器的接口,定义了Spring的容器的约束和规范。

  ClassPathXmlApplicationContext

  ApplicationContext接口的实现类,作用就是从类路径下面加载Spring的配置文件,生成ioc容器。

  getBean方法,从容器中获取Bean的方法,类似于我们之前自己在工厂类里面定义的获取Bean的方法。

  经过测试,我们查看控制台测试结果如下:

  com.qf.dao.impl.UserDaoImpl@60438a68

  基于JDBC对新增用户的方法进行实现

  com.qf.service.impl.UserServiceImpl@140e5a13

  userService方法被实现了.....

  我们发现,我们可以成功获取Dao和Service的实现类Bean,并且可以成功调用对应的方法。说明我们通过Spring管理Bean成功了!

  小伙伴再回忆一下ioc的概念,有没有觉得Bean的管理是Spring帮助我们去做的,而非我们自己创建的。

  对比我们之前反射+工厂的机制管理Bean,我们发现ClassPathXmlApplicationContext的作用就是我们之前写的BeanFactory。

 

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>