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) 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 使用Spring将war文件WEB-INF目录下的资源导入到applicationContext文件中

    我在我的项目中使用 Spring 框架 我想导入下面的所有 xml 资源 文件 WEB INF CustomerService spring integration Jobs applicationContext配置文件中war文件的目录
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will

随机推荐

  • 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