day_01_Spring_IOC(1~24)

2023-11-03

Spring

#spring: 核心组成部分 IOC+AOP

  • 轻量级:依赖包少
  • 开源
  • 框架

IOC:控制反转,将创建对象的操作交给Spring
AOP:面向切面,不修改源码实现功能的拓展

Spring的优点

  1. 通过IOC解耦,简化开发
  2. 支持AOP编程
  3. 便于测试
  4. 便于整合其他框架

基础的五个包:
5. beans
6. context
7. core
8. expression
9. logging

IOC容器

ioc:控制反转:将对象的创建及对象之间的调用过程,都交给spring
ioc底层:

  • xml解析
  • 工厂模式
  • 反射

工厂模式初步解耦

在这里插入图片描述

IOC的原理(对象工厂)

  1. 在xml文件中配置,配置创建的对象
<!--id 对象的唯一标识-->
 <bean id="demo1" class="springdemo"></bean>
  1. 创建工厂类,实现 创建目标类的对象
    1. 解析xml文件得到class属性
      String classValue = class属性
    2. 反射获取类
      Class clazz = Class.forName(classValue)
    3. 创建类
      clazz.new instance()

IOC容器实现的接口

  //加载配置文件
ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("pz.xml");
 //创建对象name = xmlBean中的id
springdemo springdemo = context.getBean("deom1", springdemo.class);
  1. BeanFactory:Spring内部使用的接口,一般不用,加载配置文件时不创建对象。
  2. ApplicationContext:1的子接口,一般使用这个接口,加载配置文件时创建对象。
    applicationcontext的两个实现类:

ClassPathXmlApplicationContext:类路径加载
FileSystemXmlApplicationContext:文件系统路径加载

ApplicationContext ac = new ClassPathXmlApplicationContext("com/zzm/context/beans.xml");//等同路径:"classpath:com/zzm/context/beans.xml"
ac.getBean("abc",abc.calss);//就可以获得bean了

ApplicationContext ac = new FileSystemXmlApplicationContext("com/zzm/context/beans.xml");//等同路径:"file:com/zzm/context/beans.xml"
ac.getBean("abc",abc.calss);//就可以获得bean了

Bean管理

  1. Spring : 创建类的对象
  2. Spring : Spring注入属性
  3. Bean的作用域:单实例(默认)、多实例 。通过scope="prototype"设置为多实例,但此时在调用getbean才创建对象
  4. 生命周期:
    1. 通过无参构造器创建bean实例
    2. 为bean设置属性值
    3. 调用bean的初始化方法
    4. 使用bean对象
    5. 关闭容器销毁bean

  • 基于xml文件方式

1. 创建对象:

在Spring配置文件xml文件中使用Bean标签,填写对应的参数,就可以实现对象的创建

 <bean id="demo1" class="springdemo"></bean>

参数1:id:对象的唯一标识
参数2:class:创建对象的类的包路径
默认采用无参构造器

  1. 依赖注入(DI)在创建对象之后执行
  1. set方法注入:通过在bean标签中添加property标签实现注入 :name:属性的名称 value:属性值
<bean id="demo1" class="springdemo">
    <property name="id" value="1" ></property>
</bean>
  1. 含参构造器注入:bean标签中添加constructor-arg标签
    <bean id="cc" class="springdemo">
        <constructor-arg name="id" value="5"></constructor-arg>
    </bean>

注入bean:即 类的其中一个属性为 另一个类

目标::将对象2注入对象1

  1. 创建两个对象1,2
  2. 将对象1的name对应的value 关键字替换为ref =‘对象2’
    <bean id="demo1" class="springdemo">
        <property name="id" value="1" ></property>
        <property name="d2" ref="demo2"></property>
    </bean>
    <bean id="demo2" class="deom2" >
        <property name="name" value="ys"></property>
    </bean>

注入:集合

 <bean id="demo3" class="deom2">
        <property name="list">
            <array>
            <!--value 替换为 ref 那么属性为 bean的id即可-->
                <value>1</value>
                <value>2</value>
                <value>3</value>
                <value>4</value>
            </array>
        </property>
        <property name="maps">
            <map>
                <entry key="姓名" value="杨森"></entry>
                <entry key="姓别" value=""></entry>
            </map>
        </property>
    </bean>

自动装配

根据指定的装配规则(属性名称,属性类型),Spring自动将属性值注入

加载配置文件中的信息

  1. 引入context名称空间
  2. 引入外部属性文件
  3. 配置
    在这里插入图片描述
  • 基于注解方式

创建对象: Spring有四个注解创建对象:功能相同

@Component
@Service
@Controller
@Repository

创建对象步骤

  • 1:引入AOPjar包,赋值修改xml文件前面几行
  • 2: 开启组件扫描 : <context:component-scan base-package=“dao,service”/>
  • 3:使用注解创建类的对象

在这里插入图片描述
value默认值为类的首字母小写后的名称。
创建对象

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("pz.xml");
        Daotest dt = context.getBean("dt", Daotest.class);
        dt.test();

基于注解的属性注入

  1. @Autowired:根据属性类型自动装配
@Autowired
private UserDao userDao;

若一个接口有两个实现类,那么单单用@Autowired无法识别注入哪个实现类。
2. @Qualifier:根据属性名注入,解决上述问题

    @Autowired
    @Qualifier(value = "UserDaoImpl1")
    @Qualifier(value = "UserDaoImpl2")
    private UserDao userDao;

此时可以通过@Qualifier的value设置注入哪个实现类
3. @Resource:根据属性名或者属性类型注入
对上面两种的整合,空参则默认注入,有name属性,则选则注入

    @Resource(name = "UserDaoImpl2")
    private UserDao userDao;

4 普通属性注入@value

    @Value("张三")
    private  String name;

纯注解开发

  1. 创建配置类,替代xml配置文件(在配置类上加@Configuration,@ComponentScan(basePackage=“包”))
@Configuration
@ComponentScan(basePackages = {"service","dao"})
public class SpringConfig {
}

  1. 加载配置文件替换为 加载配置类
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService us= context.getBean("userservice", UserService.class);
        us.add();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day_01_Spring_IOC(1~24) 的相关文章

  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • odoo中详情页字段可编辑状态与只读状态的设置

    odoo中遇到这样的情景 form详情页 比如有三个字段 name age sex 要求当name为空是age和sex可编辑 当name有值时age和sex只读 可使用attrs进行限制如下
  • 欧拉计划问题五matlab实现

    Problem 5 Smallest multiple 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without
  • HDLBits练习(五)锁存器和DFF

    1 创建具有高电平有效同步复位的8 D触发器 触发器必须重置为0x34而不是零 所有DFF应由clk的负边缘触发 module top module input clk input reset input 7 0 d output 7 0
  • nvprof 使用笔记

    1 nvprof metrics gld efficiency gst efficiency myproc 检测内存加载存储效率 2 nvprof query metrics 查看所有能用的参数命令 3 nvprof metrics sta
  • java mail 报错550 Mailbox not found or access denied

    运行了几年的发邮件程序 最近集体发邮件报错 org springframework mail MailSendException Failed messages javax mail SendFailedException Invalid
  • 力扣刷题记录 (七)动态规划(五)子序列系列

    题号300 最长递增子序列 给你一个整数数组 nums 找到其中最长严格递增子序列的长度 子序列是由数组派生而来的序列 删除 或不删除 数组中的元素而不改变其余元素的顺序 例如 3 6 2 7 是数组 0 3 1 6 2 2 7 的子序列
  • vue 权限按钮显示隐藏 (自定义指令法)

    咱们做后台管理系统 肯定避免不了 权限菜单 权限按钮的显示与隐藏 我分享一下 我的实现 import Vue from vue Vue directive auth inserted function el binding vnode co
  • 如何算根号2

    大家都应该背过公式 2 1 414 5 2 236 3 1 732 可是大家有没有想过没有计算器这些值是否还能退出来 答案我告诉你们可以的 如果你们感兴趣 那就看看接下来的内容 设x 2 那么x就是 2 由于数学公式比较难写 所以本小编用纸
  • leetcode刷题:加一

    题目描述 给定一个由整数组成的非空数组所表示的非负整数 在该数的基础上加一 最高位数字存放在数组的首位 数组中的每个元素只存储单个数字 你可以假设除了整数0之外 这个整数不会以零开头 示例 输入 digits 1 2 3 输出 1 2 4
  • 【Locomotor运动模块】瞬移

    文章目录 一 原理 二 两种类型 1 Instant 立刻 2 Dash 猛冲 三 瞬移区域 瞬移点 1 瞬移区域 2 瞬移点 一 原理 抛物线指针选择好目标位置 然后告诉瞬移预设体 你想法把游戏区域弄到目标位置来 解释 抛物线指针选择 S
  • Mysql基础之你我他(二)——Binlog

    一 Binlog简介 Binlog是二进制日志文件 用于记录mysql的数据更新或者潜在更新 比如DELETE语句执行删除而实际并没有符合条件的数据 在mysql主从复制中就是依靠的binlog 可以通过语句 show binlog eve
  • Python—发送json格式数据

    当我们发送POST请求的时候 一般会携带数据 POST请求 可以通过给data赋值 从而能够完成传递form表单数据 例如 requests post url data kw python 但有很多时候 要向服务器发送的是json数据 此时
  • score在Java的意思_使用Cross_Val_score的原因

    我对使用cross val score的原因感到困惑 根据我的理解 cross val score告诉我的模型是 overfitting 还是 underfitting 而且 它不训练我的模型 因为我只有1个特征 所以它是tfidf 稀疏矩
  • 暗影精灵5风扇怎么调_暗影精灵5首月使用总结,强悍体验升级不止一点

    PConline单机评测 即将走进社会 大学勤工俭学四年艰苦攒下的钱来之不易 得好好思考一下究竟怎么花 恰好英特尔九代酷睿高性能处理器面世 这段时间我可是做了不少功课 最后决定入手采用九代酷睿i7 9750H处理器和一系列强大硬件的惠普暗影
  • c++的引用

    include
  • 模糊数学学习笔记 2:贴近度

    个人博客地址 Glooow 欢迎光临 文章目录 1 贴近度 2 内外积 2 1 定义 2 2 性质 3 格贴近度 1 贴近度 给定 A B C
  • springboot日志的级别

    gt All lt Trace lt DEBUG lt INFO lt WARN lt ERROR lt Fatal lt OFF OFF 关闭 最高级别 不打印日志 FATAL 致命 指明非常严重的可能会导致应用终止执行错误事件 ERRO
  • gflags简单应用

    描述 一些利用gflag的小代码 参考文章https www cnblogs com myyan p 4798679 html 代码 gflags ParseCommandLineFlags argc argv false 用于解析命令行参
  • MyBatis之insert——主键自增和自定义主键

    一 实现描述 我们在写程序时 时常会遇到这样的问题 插入一条数据 但因有主键的存在 而有时候会报 违反唯一性约束 的错误 下面呢 我们就来利用MyBatis来解决这个问题 二 此文使用的数据库为MySQL 如需要使用其他数据库 请做适当更改
  • day_01_Spring_IOC(1~24)

    Spring spring 核心组成部分 IOC AOP 轻量级 依赖包少 开源 框架 IOC 控制反转 将创建对象的操作交给Spring AOP 面向切面 不修改源码实现功能的拓展 Spring的优点 通过IOC解耦 简化开发 支持AOP