【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

这篇具有很好参考价值的文章主要介绍了【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:
大家好,我是良辰丫,我们在上一篇文章不是简单介绍了SpringBoot嘛,为什么不学习SpringBoot,而是要开始Spring呢?Spring是SpringBoot的前身,我们先学习以前的稍微复杂的框架,才能更好的学习SpringBoot.💌💌💌

🧑个人主页:良辰针不戳
📖所属专栏:javaEE进阶篇之框架学习
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

1. 初识Spring

1.1 走进Spring

  • Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。
  • Spring有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。

那么能用简单的话概括一下Spring嘛?

  • Spring是包含众多工具方法的IoC容器.
  • 一句话诠释了Spring,但是还是什么都不懂,没关系,我们慢慢往下看.

什么是容器呢?

  • 想必容器这个概念大家并不陌生,从小学我们开始接触体积的时候就了解了容器,容器可以盛装东西.那么在这里也一样,这里的容器表示可以盛装许多工具方法.
  • 在java中我们常见的容器有哪些呢?
    集合就是一种数据存储容器.
    还有我们学过的Tomcat是web的容器.

IoC是什么呢?

  • IoC表示控制翻转(对对象创建的控制权进行翻转,翻转对象的生命周期).
  • 那么控制翻转又怎么理解呢?在这里我们控制的是对象,针对某个对象来说的,对对象的控制权本身在我们程序员手里,通过控制翻转,我们可以把控制权交给程序,这样就会做到解耦性.

看了上面的描述,我还是对IoC不太了解,没关系,我们慢慢往下看.

  • 我们可以这样理解IoC容器里面存放的是对象.
  • 在之前的项目中,我们需要自己去创建对象,自己去调用去使用.
  • 而在Spring中我们只需要把对象放在Spring中,用的时候从Spring中取出来,这样我们就把主动权交给Spring了.

1.2 Spring IoC小结

关于Spring IoC我们暂时只需要了解.

  • 把对象存到容器中.
  • 从容器中取出对象.

对比一下Spring IoC和之前的方式:

  • 在之前的方式中,是需要我们自己去new一个对象,需要的时候才去new对象,用完了之后就释放该对象,下次用的时候还需要进行new对象,对时间的开销也是很大的.
  • IoC容器相当于把所有可能用到的东西都放到容器里面,用的时候直接去容器里面取就可以了,用完直接放回容器,减小了耦合性,同时也降低了时间的开销.

1.3 DI的学习

  • 了解了IoC之后,必须要学习DI,DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注
    ⼊”的意思。
  • 所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中.

IoC和DI的区别:

  • 赖注⼊(DI)和控制反转(IoC)是在不同的角度描述同一件事情,通过引⼊ IoC 容
    器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦.
  • IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI就属于具体的实现.
  • 可以简而言之,IoC是一种思想,DI是通过这个思想具体做这个事情.

IoC和DI的概念是非常抽象的,打击刚开始接触的时候不容易理解,没关系,咱们一会去创建我们的第一个Spring项目,通过具体的例子了解我们的概念.

2. Spring的创建和使用

上面我们已经了解了IoC容器,现在我们来学习去创建我们的Spring项目.

2.1 创建maven项目

不需要选择1任何模板,直接点击下一步即可.

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

选择路径和名字,完成即可.

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

2.2 引入Spring依赖

  • 添加的依赖有 spring-context:spring 上下⽂,还有 spring-beans:管理对象的模块。
  • 下面的代码块就是我们的依赖代码块,大家直接复制即可.
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>
 
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>
</dependencies>

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

2.3 添加启动类

在java目录下创建一个App类,然后引入main方法即可.
【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

public class App {
    public static void main(String[] args) {
        
    }
}

2.4 创建Bean对象

在java目录下创建一个User类,其实一个类就是一个对象.
【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

public class User {
    public String say(){
        return "hello,world";
    }
}

2.5 将Bean对象存储到Spring当中

1. 在resources中创建一个spring配置文件,把相关配置拷贝到该文件中.

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="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 https://www.springframework.org/schema/context/spring-context.xsd">
</beans>

2. 将Bean对象配置到spring配置文件中.

  • id是自己起的名字,不能重复,是唯一身份标识.
  • 对象本身是包名+类名,在我们这里没有创建包,只有一个类名.

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

2.6 从Spring中读取到Bean对象

1. 得到Spring上下文对象.

        //1.得到spring上下文对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring.xml");

2. 从Spring中取出对象.

		//2.spring中取出Bean对象
        User user = (User) context.getBean("user");

3. 使用Bean对象.

        //3.使用Bean对象
        System.out.println(user.say());

2.7 运行第一个spring程序

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //1.得到spring上下文对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring.xml");
        //2.spring中取出Bean对象
        User user = (User) context.getBean("user");
        //3.使用Bean对象
        System.out.println(user.say());
    }
}

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

3. spring获取Bean的几种常见方式

1. 根据id名称来获取Bean.

 User user = (User) context.getBean("user");

2. 根据Bean对象类型来获取Bean.

这种方式会有问题,有什么问题呢?当spring中存在相同名称的对象的时候,使用这种方式会报错.

 User user = context.getBean(User.class);

3. 根据Bean名称+Bean类型来获取Bean对象.

 User user = context.getBean("user",User.class);

4. 使用BeanFactory来作为Spring 的上下文获取对象

XmlBeanFactory在idea中有个删除线,这种方式已经不怎么用了,大家简单了解一下.

   public static void main(String[] args) {
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
        User user = (User) beanFactory.getBean("user");
        System.out.println(user.say());
    }

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

5. ApplicationContext 和 BeanFactory的区别(重点面试)

二者的相同点:

  • 都可以通过上下文获取对象.
  • 都是来自spring的顶级接口(所谓顶级接口,就是它们的下面还有很多实现类来实现该接口).

二者的不同点:

  • 继承关系和功能方面:ApplicationContext属于 BeanFactory 的⼦类,子类除了拥有父类的功能之外,还包含了许多其它的功能,比如资源访问,事件传播等.
  • 性能方面:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,在后面访问Bean对象时会更快;BeanFactory 是需要哪个才去加载哪个,比较慢,这种情况是轻量级的.

为了让大家更好的理解性能方面的区别,我将举例子进行说明.

ApplicationContext是饿汉模式,也就是没有使用各个对象,但是把所有对象都加载出来.这样为了空间换时间.

    public static void main(String[] args) {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring.xml");
        System.out.println("已经得到spring对象");

    }

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

BeanFactory是懒汉模式,用的时候才加载,只有调用某个对象才会自动调用它的构造方法.

 public static void main(String[] args) {
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
        System.out.println("已经得到spring对象");
//        User user = (User) beanFactory.getBean("user");
//        User2 user2 = (User2) beanFactory.getBean("user2");

    }

【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)
【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)

关于轻量级和重量级?

  • 轻量级和重量级是相对来说的,没有绝对的标准.
  • 轻量级是加载某个东西消耗较小的资源.
  • 重量级是加载某个东西消耗较多的资源.

后序:
初识Spring到这里也就结束了,大家会发现Spring项目创建起来也没有那么容易,哈哈,咱们慢慢来学习,越往后,越简化,当我们学到SpringBoot的时候就会真正感受到框架的便捷.🍬🍬🍬文章来源地址https://www.toymoban.com/news/detail-475154.html

到了这里,关于【Spring学习】走进spring,spring的创建和使用,spring获取Bean的几种常见方式, ApplicationContext 和 BeanFactory的区别(重点面试)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring获取bean

    参考:百度安全验证 这里我列举2种方法,其它方法可以自行学习。 1、BeanUtils代码如下: 2、SpringUtils代码如下: 3、验证,测试类代码如下:

    2024年04月12日
    浏览(36)
  • Spring、Bean 创建 和 使⽤

    目录 前言 1、创建 Spring 项目 1.1、创建一个 Maven 项目 1.2、在 Maven 项目中,添加 Spring 框架支持(spring-context,spring-beans) 1.2.1添加依赖  1.2.2 配置国内源  1.2.3 添加maven 1.3、创建一个启动类 和 main 方法  2、将 Bean 对象存储到容器(Spring)中 2.1  添加配置文件 【如果是第一

    2024年02月11日
    浏览(35)
  • 获取Spring中bean工具类

    @RestController(value = “easySqlInjector”) @RequestMapping(value = “bean”) @Api(tags = “3.获取bean操作”) @Slf4j public class BeanController { @Bean(name = “easySqlInjector”) public EasySqlInjector easySqlInjector(){ return new EasySqlInjector(); } 2023-08-09 22:04:20.211 INFO 25656 — [nio-8081-exec-1] c.g.s.controller.BeanController : e

    2024年02月13日
    浏览(57)
  • Spring的存储与获取Bean

    关于 Spring 的创建及简单的使用 可以参考这篇文章 之前的存储方式是利用 bean id=\\\"\\\" class=\\\"\\\"/bean 进行存储 但这种方式存在一个弊端 即需要存储的 Bean 过多时, 手动添加过于繁琐 利用注解可以有效规避这种情况 添加注解存储 Bean 类注解 @Controller: 控制器存储 @Service: 服务存储 @

    2024年02月09日
    浏览(34)
  • Spring: Bean的创建原理解析

    1.读取Bean的定义信息 通过BeanDefinitionReader这个接口解析xml配置、配置类或其他的一些方式定义的类,得到BeanDefinition(Bean定义信息) 2.实例化Bean 通过BeanPostProcessor这个接口(增强器)可以对我们的BeanDefinition进行一些修改,然后BeanFactory通过反射实例化Bean对象,但是此时的

    2024年02月06日
    浏览(40)
  • 源码:Spring常规Bean创建过程

    一、版本 二、学习内容 三、Bean生命周期 时间轴地址:点击 四、bean创建过程脑图总结 脑图地址:点击 五、源码过程 doGetBean() getSingleton(String beanName,ObjectFactory? singletonFactory)方法: createBean()方法: doCreateBean()方法

    2024年01月20日
    浏览(42)
  • spring中存储和获取bean对象

    存储 Bean 分为以下 2 步: 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean, 说白了也就是写一个类。 告诉spring,把这个类的对象存起来。 编写 User 类, 有 sayHi 方法。 告诉 spring ,把这个类的对象存起来。 在配置文件中可以通过 bean 标签来告诉 spring 把对象存起来。

    2024年02月15日
    浏览(41)
  • Spring工具类(获取bean,发布事件)

    spring-beans-5.3.1.jar

    2024年02月11日
    浏览(34)
  • Spring - 更简单的获取 Bean 对象

    目录 二、获取 Bean 对象(对象装配或者对象注入) 1. 属性注入 1.1 属性注入的优点和缺点: 2. Setter注入  2.1 Setter注入的优点和缺点 3. 构造方法注入(spring 官方推荐的对象注入方式) 3.1 构造方法的优点和缺点 4. @Autowired 注解 和 @Resource 注解的区别 4.1 @Autowired 和 @Source 的区

    2024年02月16日
    浏览(36)
  • Spring-1-透彻理解Spring XML的Bean创建--IOC

    上一篇文章我们介绍了什么是Spring,以及Spring的一些核心概念,并且快速快发一个Spring项目,实现IOC和DI,今天具体来讲解IOC 能够说出IOC的基础配置和Bean作用域 了解Bean的生命周期 能够说出Bean的实例化方式 问题导入 问题1:在 bean 标签上如何配置别名? 问题2:Bean的默认作用

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包