初识Spring(IOC,DI,创建流程)

Posted 满眼*星辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Spring(IOC,DI,创建流程)相关的知识,希望对你有一定的参考价值。

目录

Spring Framework 布局图

IOC 控制反转

(Inversion of Control,控制反转) ,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

使用 IOC 之前,我们需要自己 new 对象,相当于对象的创建权和销毁权在我们手中,而使用 IOC 之后,相当于将控制权交给第三方(Spring容器)进行管理。

DI 依赖注入

DI (Dependency Injection,依赖注入) 是实现IoC的方法之一。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

总结: IOC 控制反转是一种程序设计思想,而 DI (依赖注入)是实现控制反转的技术实现

Spring Bean 类注册

@Controller —— 控制器(web逻辑处理层)
@Service —— 业务逻辑层 Article(CRUD)
@Component —— 通用组件
@Repository —— 数据库持久层,操作数据库数据(CRUD)

在spring项目中创建对象

  1. pom.xml中添加引用
<properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>$java.version</maven.compiler.source>
        <maven.compiler.target>$java.version</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-framework.version>5.2.10.RELEASE</spring-framework.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>$spring-framework.version</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>$spring-framework.version</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
    </dependencies>
  1. 创建一个类,然后得到它的父类对象,需要配置xml文件来扫描spring根路径
package org.example;

import org.example.controller.LoginController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App 

    public static void main(String[] args) 
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

    



  1. 在资源中创建次xml文件,有固定的格式,修改context的路径为扫描路径
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="org.example"/>

</beans>
  1. 在路径下创建controller,添加@Controller注解来注册此类到spring项目中
package org.example.controller;

import org.springframework.stereotype.Controller;

@Controller
public class LoginController 


  1. 使用getbean方法取到创建的新类
  • 可以使用字符串的格式
    public static void main(String[] args) 
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        LoginController loginController = (LoginController) context.getBean("loginController");
        System.out.println(loginController);
        //关闭容器
        ((ClassPathXmlApplicationContext)context).close();
    

要注意的是getbean中的参数是需要有规范的,
第一个字母为大写,后面为小写,则需要第一个字母小写,如Login,需要变为login
前三个字母为大写,则不需要改变,如UMLlala,不用改变

ps:如果不确定需要改的格式,则可以用这种方式来看需要改的格式
System.out.println(Introspector.decapitalize("LoginController"));

  • 参数也可以用类的方式
    public static void main(String[] args) 
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        LoginController loginController = context.getBean(LoginController.class);
        System.out.println(loginController);
        //关闭容器
        ((ClassPathXmlApplicationContext)context).close();
    

同样的,都是可以得到该类的

总结 Spring 创建流程

  1. 创建一个 maven
  2. 创建一个启动类,创建 ApplicationContent 对象,设置一个 XML
  3. XML 规定了依赖主入对象的根路径
  4. 依赖注入
    a)Controller —— 前端业务交互层【参数效验】
    b)Service —— 业务处理的中间层【业务处理】
    c)Reoisitory —— 数据持久层
    d)Component —— 通用对象工具类
  5. 得到 bean 对象
    a)注解:@Autowrited、@Resource
    b)ApplicationContent. getBean()
    【getBean(“类名”) —— 首字母大写,对应类名应该是首字母小写;如果首字母和第二个字母都是大写,那么对应类名不改变。“Abc” -> “abc”,“ABC” -> “ABC”】
    【getBean(类型) 得到bean。getBean(Login.class)】

以上是关于初识Spring(IOC,DI,创建流程)的主要内容,如果未能解决你的问题,请参考以下文章

Spring之手写SpringMVC5个注解(之IOC,DI优化)了解三级缓存

初识 - Spring

java之spring

Spring-IOC学习笔记-01初识

初识Spring(AOPIOC和DI)——对新手友好♥♥♥

初识Spring(AOPIOC和DI)——对新手友好♥♥♥