• Spring创建和使用


    目录

    Spring的创建和使用

    创建一个Spring项目

    1.创建一个Maven项目

    2.添加Spring依赖

    3.添加一个启动类

    将bean存放到Spring中

    1.创建一个bean对象.

    2.将bean存放到spring中

    从Spring中取出bean

    获取到Spring上下文对象

    从Spring中获取bean对象

    可能出现的错误/异常

    ApplicationContext VS BeanFactory(常⻅⾯试题)


    IOC 是Spring框架的核心内容.使用多种方式完美的实现了IOC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置IOC.

    Spring容器在初始化时候先读取配置文件,根据配置文件或者元数据创建与组织对象存入容器中,程序使用的时候再从IOC容器取出需要的对象

    了解了 Spring是一个包含众多方法的IOC容器,也知道spring的核心功能就是将对象存放到Spring中,再将对象从Spring中取出来.

    接下来我们创建一个Spring项目来实战一下,究竟Spring的IOC思想是怎么回事,怎么创建一个Spring项目,怎么将对象存放到Spring中,又怎么将对象从Spring中取出来..接下来我们逐一讲解.

    Spring的创建和使用

    如何创建Spring项目呢?

    1. 首先我们要先创建一个Maven项目
    2. 引入框架支持-->spring的依赖 spring-context 和 spring-beans
    3. 然后创建一个启动类

    创建一个Spring项目

    1.创建一个Maven项目

    我们第一步是创建一个Maven项目

    2.添加Spring依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframeworkgroupId>
    4. <artifactId>spring-contextartifactId>
    5. <version>5.2.3.RELEASEversion>
    6. dependency>
    7. <dependency>
    8. <groupId>org.springframeworkgroupId>
    9. <artifactId>spring-beansartifactId>
    10. <version>5.2.3.RELEASEversion>
    11. dependency>
    12. dependencies>

    加载之后就会出现相应的jar包

    这个就是我们下载的jar包.

    • 我们不是只引入了spring-context依赖 和 spring-beans依赖么,为什么会下载这么多jar包??

    这是因为我们引入的这些依赖,还依赖着其他的jar包.

    spring-context : spring-context就代表spring本身(spring的上下文)

    spring-beans : 代表管理对象的模块(因为我们要往spring里面存bean对象和取bean对象,所以要引入spring-beans依赖 在spring中对象就是bean,(对象会重复使用)).

    3.添加一个启动类

    • 为啥要添加启动类呢?? 我记得Servlet不需要创建启动类啊.

    因为我们现在创建的是Spring core项目,也就是最基础的spring项目,最基础的项目是没有Web模块的,所以需要添加启动类.

    而对于Servlet来说,它是一个Web基础,需要配置Tomcat来使用,Servlet是一个Web技术(或者Web框架),它是在Tomcat服务器上运行的,对于Tomcat来说它是内置了启动类,也就是Tomcat源码中会有一个main方法的.

    1. public class App {
    2. public static void main(String[] args) {
    3. }
    4. }

    我们创建好一个Spring项目之后..我们如何使用Spring呢??

    将bean存放到Spring中

    如何存储呢?? 我们需要以下几步

    • 先要有一个bean对象(bean在Java中就是对象,在Spring中叫做bean).
    • 然后再将bean对象存放到Spring当中

    1.创建一个bean对象.

    1. /**
    2. * 创建一个bean对象
    3. * 就是一个普通的对象
    4. */
    5. public class User {
    6. //就是一个普通的方法
    7. public void sayHello(){
    8. System.out.println("hello,spring");
    9. }
    10. }

    2.将bean存放到spring中

    • 将bean存放到spring当中,首先我们要添加配置文件.放到resource目录中.
    1. "1.0" encoding="UTF-8"?>
    2. "http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans.xsd">
    • 往spring中注册一个bean.

    往spring中注册一个bean也就是在配置文件XML中,添加一个bean标签,就代表要往Spring中注册一个bean,至于注册哪一个bean(也就是哪一个类),需要通过bean标签的属性来指定.

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans.xsd">
    6. <bean id = "user" class = "com.sfx.User">
    7. bean>
    8. beans>
    • 在spring-config 配置文件(XML)中加入一个bean标签就代表往spring容器中注册一个bean对象
    • bean标签有两个属性 id 和 class
    • id 代表这个bean对象的标识 ,一般为类名的小驼峰形式
    • class 可以定位到类的存储位置,可以定位到唯一的对象. 也就是你要把哪一个类的对象添加到spring当中; 包名+类名

    从Spring中取出bean

    既然我要从spring中取出bean,首先我得先要有一个Spring对象

    获取到Spring上下文对象

    得到spring上下文对象有两种方式可以获取到 一个是 ApplicationContext 一个是BeanFactory

    首先我们来使用ApplicationContext来获取Spring上下文对象

    1. //1.获取到Spring上下文对象 , 因为我们是从XML文件进行获取Bean的. 要指定从哪个XML获取bean
    2. ApplicationContext context = //注意这里的配置的XML不要写错了
    3. new ClassPathXmlApplicationContext("spring-config.xml");

    从Spring中获取bean对象

    获取bean有很多方式...

    通过 bean的id 来获取到Bean对象

    1. /**
    2. * 启动类
    3. */
    4. public class App {
    5. public static void main(String[] args) {
    6. //1.获取到Spring上下文对象 , 因为我们是从XML文件进行获取Bean的. 要指定从哪个XML获取bean
    7. ApplicationContext context = //注意这里的配置的XML不要写错了
    8. new ClassPathXmlApplicationContext("spring-config.xml");
    9. //2.获取到bean对象
    10. //以前获取对象的方式 User user = new User();//在spring中就不要出现了,耦合度高
    11. //2.1 通过bean的id来获取到bean 通过传入String的参数 id
    12. //这里需要进行强转
    13. User user = (User) context.getBean("user");//通过Spring的方式来获取到bean的.
    14. //3.使用bean 调用bean的方法
    15. user.sayHello();
    16. }
    17. }

    优点 : 通过 bean的id来获取bean对象的时候,如果有多个bean对象的时候可以通过id来区分我到底是获取哪一个对象.

    缺点 : 通过bean的id来获取bean 缺点就是需要进行强转,如果为null的时候就会报异常.

    通过 bean的类型来获取bean对象

    1. public class App {
    2. public static void main(String[] args) {
    3. //1.获取到Spring上下文对象 , 因为我们是从XML文件进行获取Bean的. 要指定从哪个XML获取bean
    4. ApplicationContext context = //注意这里的配置的XML不要写错了
    5. new ClassPathXmlApplicationContext("spring-config.xml");
    6. //2.获取到bean对象
    7. //以前获取对象的方式 User user = new User();//在spring中就不要出现了,耦合度高
    8. //2.2通过bean的类型来获取bean
    9. User user = context.getBean(User.class);
    10. //3.使用bean 调用bean的方法
    11. user.sayHello();
    12. }
    13. }

    缺点 : 使用类型来获取bean的缺点就是如果有多个bean对象的时候,就无法进行区分bean了.

    通过bean的id + 类型 来获取 bean --->这个是最推荐的做法.

    1. public class App {
    2. public static void main(String[] args) {
    3. //1.获取到Spring上下文对象 , 因为我们是从XML文件进行获取Bean的. 要指定从哪个XML获取bean
    4. ApplicationContext context = //注意这里的配置的XML不要写错了
    5. new ClassPathXmlApplicationContext("spring-config.xml");
    6. //2.获取到bean对象
    7. //以前获取对象的方式 User user = new User();//在spring中就不要出现了,耦合度高
    8. //2.3通过 bean的 id 和 类型 来获取到bean对象 最稳妥的做法
    9. User user = context.getBean("user",User.class);
    10. //3.使用bean 调用bean的方法
    11. user.sayHello();
    12. }
    13. }

    可能出现的错误/异常

    通过id获取bean可能出现的异常

    当使用 id 来获取 bean对象的时候,需要保证user这个id标识是唯一的.

    所以在使用id来获取bean对象的时候,要确保id是唯一的,这时要检查beans标签.--->利用标识可以区分不同的bean.

    但使用id来获取bean对象 ,有一个缺点就是如果获取bean为空,在强转就会出现异常.

    通过类型来获取bean对象的时候可能会出现的异常

    配置文件名写错可能发生的异常

    ApplicationContext VS BeanFactory(常⻅⾯试题)

    BeanFactory也是一种获取bean的方式.

    1. public class APP1 {
    2. public static void main(String[] args) {
    3. //1.获取到Spring上下文对象 , 因为我们是从XML文件进行获取Bean的. 要指定从哪个XML获取bean
    4. BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
    5. //2.获取到bean对象
    6. //以前获取对象的方式 User user = new User();//在spring中就不要出现了,耦合度高
    7. //2.3通过 bean的 id 和 类型 来获取到bean对象 最稳妥的做法
    8. User user = context.getBean("user",User.class);
    9. user.sayHello();
    10. }
    11. }

    显然这个是已经是很老的,不推荐使用.

    那ApplicationContext 与 BeanFactory的区别是什么呢?

    相同点 : ApplicationContext与BeanFactory都是可以获取到Spring上下文对象的.

    不同点 :

    • 继承关系和功能上 :

    ApplicationContext 是 BeanFactory 的 一个子类.ApplicationContext具备了BeanFactory的所有功能和能力,BeanFactory只具备了最基础访问Bean的能力,ApplicationContext具有更多的独有的功能,比如国际化支持,资源访问支持等....

    • 性能和加载方式上 :

    BeanFactory是比较老派的类了,由于以前硬件设备和空间不足,所以,BeanFactory按需进行加载,也就是当使用Bean的时候,再去加载,更加轻量,节省资源,缺点是第一次加载Bean比较慢.

    而ApplicationContext由于资源充足,采用一直空间来换时间..,它是一次性加载所有的bean(在创建对象的时候就将所有的bean进行初始化创建),所以后面再去访问的时候,就非常的块,性能高.但可能会造成资源的浪费

  • 相关阅读:
    特殊的类——集合与泛型(C#)
    TS中的info用法
    《Ubuntu20.04环境下的ROS进阶学习2》
    MIPS指令和汇编语言有什么关系
    基于SpringBoot的体育场运营系统
    FPGA project : ROM_VGA
    YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights & Biases)
    Continual Learning of Large Language Models: A Comprehensive Survey
    4.正则提取html中的img标签的src内容
    SpringCloud初探
  • 原文地址:https://blog.csdn.net/m0_61210742/article/details/127720385