当前位置: 首页 > news >正文

0306spring--复习

一,spring是什么
       Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架
理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架
优点:
弊端:违背了原有的技术理念:配置太过繁琐,被称为“配置地狱”

二,Spring框架由七个定义明确的模块组成

三,现代化的开发就是基于spring容器的开发,
      1.springboot :一个快速开发的脚手架
        约定大于配置
       2.springcloud:
        springCloud是基于SpringBoot实现的

四,控制反转和面向切面
IOC:(获得依赖对象的方式反转了,对象由spring来创建,管理和装配)
1.控制反转:从本质上解决了问题,使我们程序员不用再去管理对象的创建了
       系统的耦合性大大降低,可以更专注于业务的实现(IOC的原型)
1)以前:程序是需要程序员主动创建对象,控制权在开发人员手上
2)使用了set方法,程序不再具有主动性,而是变成了被动的接受对象,主动权在用户手上
3)配置:
    

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"></beans>


    ref: 引用Spring容器中创建好的对象
        value:具体的值,基本数据类型
4)IOC创建对象的方法:
    1.默认使用无参构造创建对象
    2. 手动配置有参构造:constructor
        1)下标赋值:index
        2)通过类型创建(不建议)
        3)通过参数名:name
5)在配置文件加载的时候,容器中管理的对象就已经初始化了,(容器类似于婚介所,只有对象注册到了婚介所,当容器applicationcontext被创建,被管理的对象也就存在,也就是被初始化了)

五,spring的配置
1.别名:
    alias:----->如果添加了别名,我们也可以通过别名获取对象
2.Bean的配置:
    id:bean的唯一标识符,也就是相当于我们的对象名
    class:bean的全限定名“包名+类名”(bean对象所对应的全限定名)
    name: 也是别名:而且name比alias更高级,可以同时取多个别名(逗号或空格或分号分割)
    ref:引用Spring容器中创建好的对象
    value:具体的值,基本数据类型
3.import:
    1)这个import,一般用于团队开发,可以将多个配置文件,导入合并为一个
    2)假设项目中有多个人开发,这三个人负责不同类的开发,不同类需要注册到不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的
    张三:beans
    李四:beans2
    王五:beans3
    applicationContext.xml:
             <import resource="beans.xml"/>
            <import resource="beans2.xml"/>
            <import resource="beans3.xml"/>
    使用的时候,直接使用总的配置就好了

六,DI依赖注入
1.构造器注入:
    
2.通过set方式注入
    依赖注入:set注入
    依赖:bean对象的创建依赖于容器
    注入:bean对象中的所有属性,由容器来注入
    环境搭建:
        1.复杂类型
        2.真实测试对象

<bean id="student" class="com.kuang.pojo.Student"><!--第一种,普通注入--><property name="name" value="小俊"/><!--第二种:bean注入,ref--><property name="address" ref="address"/><!--第三种:,数组注入--><property name="books"><array><value>红楼梦</value><value>西游记</value><value>水浒传</value><value>三国演义</value></array></property><!--第四种:list--><property name="hobbys"><list><value>听歌</value><value>王者</value><value>跳舞</value></list></property><!--第五种:map--><property name="card"><map><entry key="身份证" value="1234543234543234"/><entry key="银行卡" value="3ueqrqyrqoyrqywqo"/></map></property><!--第六种:set--><property name="games"><set><value>LOL</value><value>COC</value><value>BoB</value></set></property><!--第七种:null--><property name="wife"><null/></property><!--第八种:properties--><property name="info"><props><prop key="学号">190970070</prop><prop key="性别">男</prop><prop key="姓名">小俊</prop></props></property></bean>


3.其他方式注入

注意:这两种不能直接使用,需要去导入约束,从官方文档去拿
1)p命名注入       xmlns:p="http://www.springframework.org/schema/p"
 2)c命名注入      xmlns:c="http://www.springframework.org/schema/c"
    <!--p命名空间,可以直接注入属性的值-->
    <bean id="user" class="com.kuang.pojo.User" p:name="小俊" p:age="18"/>
    <!--c命名空间,通过构造器注入:construct-args-->
    <bean id="user2" class="com.kuang.pojo.User" c:age="18" c:name="小俊俊"/>
    
            

4.bean的作用域:

 1)单例模式:singleton:
    spring 默认机制
        <bean id="user2" class="com.kuang.pojo.User" c:age="18" c:name=" 小俊俊"  scope="singleton"/>
2)原型模式:prototype:
    每次从容器中get的时候,都会产生一个新对象

3)其他的在web中才用到

七.Bean的自动装配 

自动装配是spring满足bean依赖的一种方式
spring会在上下文中自动寻找,并自动给bean装配属性
三种装配在方式:
1)在xml中显示的配置
2)在java中显示的配置
3)隐式的自动装配bean(重要)
    1.byName自动装配
    byName会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanID

<bean id="people" class="com.kuang.pojo.People" autowire="byName"><property name="name" value="小俊俊呀!"/></bean>


    2.byType自动装配
    byName会自动在容器上下文中查找,和自己对象属性类型相同的beanID

<bean id="people" class="com.kuang.pojo.People" autowire="byType"><property name="name" value="小俊俊呀!"/></bean>

小结:

  • byname的时候:需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法值一致
  • byname的时候:需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型值一致

    

http://www.lryc.cn/news/32071.html

相关文章:

  • 动手实现一遍Transformer
  • 【Flutter入门到进阶】Flutter基础篇---弹窗Dialog
  • 【操作系统】进程和线程的区别
  • Linux开发环境配置--正点原子阿尔法开发板
  • Android ThreadPoolExecutor的基本使用
  • 基于区域生长和形态学处理的图像融合方法——Matlab图像处理
  • 三个案例场景带你掌握Cisco交换机VLAN互通
  • 小白入门之持久连接与非持久连接的差别
  • TypeScript篇.01-简介,类,接口,基础类型
  • 分享几种WordPress怎么实现相关文章功能
  • PANGO的IOB的电平能力那些事
  • scrpy学习-02
  • MySQL运维篇之Mycat分片规则
  • vue router elementui template CDN模式实现多个页面跳转
  • ElasticSearch - ElasticSearch基本概念及集群内部原理
  • 【反射中,Class.forName和ClassLoader区别】
  • 2023了为什么还有人在问:女生适合做跨境电商吗?
  • 磁盘分区和挂载
  • 电子技术——晶体管尺寸
  • Tuxera NTFS2023MacOS读写软件功能介绍使用
  • 2022年数维杯国际大学生数学建模挑战赛A题自动地震地平线跟踪解题全过程论文及程序
  • 推荐系统[八]:推荐系统常遇到问题和解决方案[物品冷启动问题、多目标平衡问题、数据实时性问题等]
  • shutil.copyfile PermissionError: [Errno 13] Permission denied
  • 07react+echart,大屏代码开发
  • 【数据库原理复习】ch2 SQL语句(主要基于sql server)
  • Cadence Allegro 导出Component Pin Report详解
  • PAT甲级 1110 Complete Binary Tree
  • 【JavaSE】逻辑控制语句
  • Motionbuilder系统文件说明
  • 【我的Android开发】AMS中Activity栈管理