Spring框架入门基础1:IOC---控制权反转

2023-11-08

Spring框架的优点

方便解耦,简化开发,Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理,这也是IOC的作用。

IOC

IOC就是控制反转,将创建对象的过程交给spring进行管理,可以用来减低计算机代码之间的耦合度。

IOC的实现流程:

① 解析xml文档;

② 工厂模式;//将创建对象的任务交给工厂,解耦的重要步骤。

③ 采用反射设计模式创建对象

我们创建一个maven工程,并导入相应的依赖坐标

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

然后编写核心配置文件,在resources目录下创建

我们创建一个实体类,并定义一个hello方法

 我们在xml配置文件中,通过IOC配置创建对象,在这里我们需要理解一个概念:bean,我们可以将bean理解为类的代理或者是类的设计图。

    <!--IOC管理bean-->
    <!--id:类的唯一标识符(一般就是类名)class:类的全路径名-->
    <bean id="Demo" class="com.qcby.service.Demo"/>

我们先简单的通过Spring来创建一个对象实例

创建一个DemoTest类,注意在test目录下的java测试根目录创建。

public void run1(){
        //加载配置文件
        ApplicationContext ac =  new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取对象
        Demo demo = (Demo) ac.getBean("Demo");
        demo.hello();
    }

然后我们通过xml配置的方式,通过对bean的管理来对创建的对象进行依赖注入。

xml配置创建及注入

首先创建一个User类

 然后我们在xml文件中对其注入

<bean id="User" class="com.qcby.service.User">
        <!--property完成属性的注入-->
        <!-- name:属性名       -->
        <!--   value:属性值     -->
        <!--  ref:对象映射  :只能映射在bean中定义的 -->
        <property name="age" value="18"/>
        <property name="name" value="wkx"/>
        <property name="demo" ref="Demo"/>
</bean>

这种方式称为属性的set方法注入,顾名思义,我们需要生成属性的set方法

 我们将set方法注释,发现注入失败。

我们还可以通过构造器的方式对属性进行依赖注入

<!-- 通过类的构造器进行依赖注入   -->
    <bean id="User1" class="com.qcby.service.User">
        <!--    constructor-arg:构造器注入依赖  ,其余和set方式注入基本一致  -->
        <constructor-arg name="age" value="25"/>
        <constructor-arg name="name" value="构造器"/>
        <constructor-arg name="demo" ref="Demo"/>
    </bean>

然后我们来介绍一些特殊属性的注入,array、list、map

依然是新建一个Collection类,并生成set方法,并通过property的方式注入

<bean id="Collection" class="com.qcby.service.Collection">
        <!--给数组类型赋值-->
        <property name="strs">
            <array>
                <value>wkx</value>
                <value>123</value>
                <value>www</value>
            </array>
        </property>
        <!--   给集合list赋值     -->
        <property name="list">
            <list>
                <value>ww</value>
                <value>pis</value>
                <value>dal</value>
            </list>
        </property>
        <!--  给map赋值      -->
        <property name="map">
            <map>
                <entry key="1" value="w"/>
                <entry key="2" value="ww"/>
                <entry key="3" value="www"/>
            </map>
        </property>
    </bean>

以上是通过xml配置的方式来创建对象以及依赖注入,接来下介绍用注解的方式创建对象和注入依赖。

创建对象的四个注解

@Component 普通的类  //默认当前类名就是ID名称,首字母小写

@Controller 表现层

@Service 业务层

@Repository 持久层

这四种方式在Spring框架中创建对象时,使用方式基本一致。我们以Component为例

首先需要在xml文件中开启注解扫描

<!--开启注解扫描 com.qcby所有的包中的所有的类-->
<context:component-scan base-package="com.qcby"/>

然后在需要管理的类上添加@Component注解即可。

依赖注入的四个注解

@Value 用于注入普通类型(String,int,double等类型)

@Autowired 默认按类型进行自动装配(引用类型)

@Qualifier 不能单独使用必须和@Autowired一起使用,强制使用名称注入

@Resource Java提供的注解,也被支持。使用name属性,按名称注入

常用的是前两个注解方式

@Component
public class Annotation {

    @Value("16")
    private Integer age;
    @Value("王凯先")
    private String name;

}
ApplicationContext ac =  new ClassPathXmlApplicationContext("applicationContext.xml");
Annotation annotation = (Annotation) ac.getBean("annotation"); 
System.out.println(annotation);

Spring框架基础入门2:AOP--面向切面编程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring框架入门基础1:IOC---控制权反转 的相关文章

随机推荐

  • Java OCR 图像智能字符识别技术,可识别中文

    几天一直在研究OCR技术 据我了解的情况 国内最专业的OCR软件只有2家 清华TH OCR和汉王OCR 看了很多的OCR技术发现好多对英文与数字的支持都很好 可惜很多都不支持中文字符 Asprise OCR Tesseract 3 0以前的
  • 【apifox/postman】使用技巧

    文章目录 一 apifox 1 1 设置全局变量 1 1 1 token 二 postman 2 1 设置全局变量 一 apifox 1 1 设置全局变量 1 1 1 token 首先设置 login 接口后 取 token 设置到 名为
  • 零基础,零成本,部署一个属于你的大模型

    前言 看了那么多chatGPT的文章 作为一名不精通算法的开发 也对大模型心痒痒 但想要部署自己的大模型 且不说没有算法相关的经验了 光是大模型占用的算力资源 手头的个人电脑其实也很难独立部署 就算使用算法压缩后的大模型 部署在个人电脑上
  • pytorch: 给tensor删除或者添加维度为1的维度(squeeze和unsqueeze)

    删除tensor中维度为1的维度 在pytorch中 用torch squeeze 函数或者tensor的自身成员函数squeeze 去除维度为1的维度 import torch x torch randn 3 1 4 1 2 a x sq
  • Servlet学习(八):Session

    一 Session的基本使用 1 概念 Session 服务端会话跟踪技术 将数据保存到服务端 Session是存储在服务端而Cookie是存储在客户端 存储在客户端的数据容易被窃取和截获 存在很多不安全的因素 存储在服务端的数据相比于客户
  • GDB 格式化结构体输出及记录到文件

    GDB 常用命令参考手册 set print address set print address on 打开地址输出 当程序显示函数信息时 GDB会显出函数的参数地址 系统默认为打开的 show print address 查看当前地址显示
  • JDBC五种连接方式详解

    目录 前言 二 JDBC程序编写步骤 1 总流程图如下 2 五种连接方式 2 1 数据库连接方式一 2 2 数据库连接方式二 2 3 数据库连接方式三 2 4 数据库连接方式四 2 5 数据库连接方式五 总结 前言 JDBC Java Da
  • 【计算机网络】 RTT和RTO

    文章目录 RTT 往返时延 RTO Retransmission Timeout 超时重传时间 RTT 往返时延 RTT Round Trip Time 是计算机网络中的一个重要的性能指标 表示从发送端发送数据开始 到发送端接收到来自接收端
  • STM32学习笔记——EXIT(外部中断)

    目录 一 什么是中断系统 二 中断系统执行流程 三 NVIC 提供中断控制器 CPU的好助手 1 NVIC的作用 STM32 2 NVIC优先级分组 四 EXTI 外部中断 1 EXTI简介 2 EXTI基本结构 3 EXTI框图 五 AF
  • elk笔记12--常见api和设置区别

    elk笔记12 常见api和设置区别 1 freeze 和 close 区别 1 1 freeze介绍 1 2 close介绍 2 persistent 和transient区别 3 两个allocation 说明 本文主要记录 es 中常
  • 《数据结构》将一个带头结点的单链表分解成两个单链表

    将一个带头结点的单链表分解成两个单链表 题目描述 设计一个算法 将一个带头结点的单链表分解成两个具有相同结构的 链表B和C 其中B白哦的结点为A中小于0的结点 C表的结点为A中大于0 的结点 要求B和C 仍利用A表的结点 A表的元素都是非0
  • pyqt5 QLabel详细用法

    QLabel控件类的主要API如下 setAlignment 设置文本的对齐方式 setIndent 设置文本缩进 text 获取文本内容 setText 设置文本内容 selectedText 返回所选择的字符 setBuddy 设置伙伴
  • OpenCV代码提取:遍历指定目录下指定文件的实现

    OpenCV 3 1之前的版本 在contrib目录下有提供遍历文件的函数 用起来比较方便 但是在最新的OpenCV 3 1版本给去除掉了 为了以后使用方便 这里将OpenCV 2 4 9中相关的函数给提取了出来 适合在Windows 64
  • python运行报错:‘NoneType‘ object is not callable

    NoneType object is not callable 空类型对象不可调用 调用了装饰器函数 但是装饰器函数没有返回值 导致使用的函数报错 参照代码的注释 timmer 引用装饰器等于test1 timmer func 所以timm
  • 字节跳动开源 Kelemetry:面向 Kubernetes 控制面的全局追踪系统

    动手点关注 干货不迷路 Kelemetry是字节跳动开发的用于Kubernetes控制平面的追踪系统 它从全局视角串联起多个 Kubernetes 组件的行为 追踪单个 Kubernetes 对象的完整生命周期以及不同对象之间的相互影响 通
  • MongoDB 获取数组中匹配到的第一个元素对象

    例如当前test库中的grade集合中有两条文档数据 如下图所示 相关的两个实体映射类如下 import lombok Data import org springframework data annotation Id import or
  • 政企数智办公潮水里的融云「答卷」

    在这张集合了党政机关 金融保险 交通 能源电力等中大型组织复杂办公需求的高难度答卷上 融云在扎实耐打的通信底层之上 保持灵活的身段和强大的进化能力 稳定而轻盈 在不断变化的环境中正在成为确定性本身 作者 皮爷 出品 产业家 如果说过去两年里
  • 报sslSocketFactory(SSLSocketFactory) not supported on JDK 9+

    使用OkHttpClient的时候 jdk版本1 8 0 151启动不会报错 但jdk版本1 8 0 202启动就会报错 应该是OkHttpClient jdk小版本号高了不行 修改代码如下 public class SSLSocketCl
  • 20.docker之DockerCompose基础进阶

    1 docker compose命令模板 docker compose yml 作用 compose以项目为核心 在项目中定义一组具有相同业务逻辑单元服务运行 注意 在编写docker compose yml文件时 所有的冒号 短横线 后面
  • Spring框架入门基础1:IOC---控制权反转

    Spring框架的优点 方便解耦 简化开发 Spring就是一个大工厂 可以将所有对象创建和依赖关系维护 交给Spring管理 这也是IOC的作用 IOC IOC就是控制反转 将创建对象的过程交给spring进行管理 可以用来减低计算机代码