Spring简介

一、Spring的定义

Spring就是一个包含了众多工具类的IoC容器。

(1)什么是IoC?
IoC(inverse of control)控制反转,IoC是一种思想, 是为了让程序员更加专注于业务代码的逻辑关系,减少对依赖的创建和管理的关心。比如现在需要完成一个盖房子的业务,传统的过程就是我要自己去购买砖头,水泥,钢筋等原材料,等原材料被我搞定之后我再考虑如何建房子的流程,但是再IoC思想下,我只需要考虑如何建房子,这些原材料我需要用到时就让一个外包公司帮我拉来,我不关心外包公司的原料是什么价格,怎么运输,我只需要直接用就可以。
这其中的重要转变就是我把我对原材料的控制权转交给了外包公司,我从主动获取原材料,变成了被动等待外包公司将原材料拿给我。
IoC的重要功能就是解耦。
(2)什么是容器?
容器就是存储数据的结构,像java中的List,Map这些都可以说是容器,用上面的建房子例子来说,容器就是那个外包公司,它需要购入原材料,也需要提供给使用者原材料。所以,容器最主要的功能就是存入和取出。在Spring中,容器要创建对象,存储对象,注入对象,销毁对象。
(3)属性注入是什么?
属性注入就是实现IoC的一种方式

二、如何使用Spring

  • 创建spring项目

    1. 创建maven项目
    2. 引入spring依赖(不要使用6版本以上的,6的最低兼容jdk为jdk17)
    3. 创建spring配置文件
      • 这个配置文件的名称固定,但是必须是xml文件,建议命名为spring-config.xml

      • 这个配置文件必须放在Resource目录下Spring简介_第1张图片

      • 配置文件的基本内容为

        
        <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>
        
  • 向Spring容器中加入Bean对象

    • 首先要明确的是:

    什么是Bean对象?
    答:Bean对象就是往Spring容器中装入的对象,和一般的类对象没有什么不同,只是因为这些对象被Spring控制,为了区分就把它们叫做Bean对象。

    • 如何添加对象得到Spring容器中?
      1. 在配置文件中配置Bean标签,标签的class属性的值就是Bean对象类的路径,id属性就是bean对象的名称,在读取Bean对象时,需要用到id。

        
        <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">
           
            <bean id="user" class="com.java.demo.enity.User">bean>
        beans>
        
      2. 使用注释(五大类注释和一个方法注释)

      • @Component,@Controller,@Service,@Repository,@Configuration,这就是五大类注解,只要在类定义的前面加上任何一个注解,这个类对象就会被存入一份到Spring容器中
      • @Bean,这是方法注解,只要在有返回值的方法前面加上这个注解,就可以直接将返回的对象装入Spring容器中,@Bean的方法必须是在类注释下的类里面的方法
      • 要想Spring容器正确识别注释从而获取Bean对象,需要对Spring容器进行配置,base-package的路径就是Spring容器扫描的根路径,Spring会扫描这个路径下的所有类,检查是否有类注释和方法注释。

<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">
    <content:component-scan base-package="com.java.demo">content:component-scan>
beans>
  • 从Spring容器中取出Bean对象(对象注入)
    • 首先要获取Spring容器,有两个类可以获取ApplicationContext和BeanFactory
      1. BeanFactory获取Spring容器
        BeanFactory beanFactory=new ClassPathXmlApplicationContext("spring-config.xml");
        
      2. ApplicationContext获取Spring容器
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        
      这两种方式获取Spring容器都要将配置文件的名字传参。
    • 通过获取到的容器来取出Bean对象(只传类,只传值,传类又传值)
      context.getBean("beanLife", BeanLife.class);
      
      字符串就是Bean的id属性,后面的class属性就是对应类的class属性
      此时问题就来了

      使用注解加入Spring容器的对象的id名是啥?
      答:默认id是类名的大驼峰形式改成小驼峰(类名首字符小写),但是当类名的前两个字母都是大写时,id默认是原类名,方法注释获取的对象,默认id名称就是方法名。并且使用类注释添加Bean对象时,可以再添加的时候设置value属性来设置Bean的名称,在使用方法注释添加Bean对象时,可以使用name属性来设置别名,方法注释的name属性可以设置多个名称,用String数组表示。
        注意:
      1. 当设置了别的名字后,默认的名字就不能用了
      2. 当有两个方法注释获取到的Bean对象的id一样,class也一样时,最后从Spring中获取到的Bean只有其中一个,谁先加载,谁就被覆盖了。可以使用@order(int值)来设置加载优先级,数越小,优先级越高,越快被加载,也就是被覆盖的那个。
      3. @Bean获取的方法不能有参数

你可能感兴趣的:(spring,java,后端)