首页 > 编程语言 >Java后端07(Spring未完成)

Java后端07(Spring未完成)

时间:2023-08-08 12:00:25浏览次数:35  
标签:Java 07 对象 Spring 创建对象 模式 bean 开发者

Spring

​ 涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。

Spring配置文件文件头

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

IOC 控制反转 ---- 将创建对象的权力由开发者交 给 Spring(缓解对象和对象之间的耦合度)

​ 在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(spring中所有的对象都是从实例工厂中自动创建,涉及到简单工厂模式)

IOC底层原理

  1. xml解析(负责读取配置文件中 Bean 的相关信息)
  2. 简单工厂模式(借助 BeanFactory 完成对象的实例化和返回)
  3. 反射(不使用 new 创建对象的根本原因)

简单工厂模式

优点:

  1. 设计与实现分离(开发者不需要关心对象是如何创建出来的)
  2. 如果要拓展业务,并不会影响之前的业务,只需要拓展子类即可

IOC容器的两种实现方式

  1. BeanFactory:是Spring内部使用的接口,不建议给开发人员使用,该容器加载配置文件时,并不会创建响应对象,当开发者尝试获取对象的时候,才会创建对象(类似懒汉模式,具有延迟加载的特性)
  2. ApplicationContext:BeanFactory的子接口,一般由开发人员使用,该容器在加载配置文件的时候,就会创建对象(类似饿汉模式,不会出现并发安全问题,线程安全)

DI 依赖注入 ---- 在你配置好 bean 的情况下,由 Spring 帮你完成对象的赋值

优点:

  1. 实现了接口和实现的分离
  2. 组件化的思想,分离关注点,使用接口时,不再关注实现

Spring 的 bean 管理

⭐Bean的声明周期

  1. 常规五步声明周期

    ​ 通过构造器创建 bean 实例 => 通过反射调用 setter 方法完成属性赋值 => 调用 bean 的初始化方法 => 获取 bean 实例 => 当容器关闭的时候, 调用 bean 的销毁方法

bean创建(IOC)

  1. 基于xml的配置方式

    结构分析<bean id="person" class="com.iweb.entity.Person" scope="prototype"/>

    id 对象的唯一标识,通过 id 获取 bean 实例

    class 对象所属类的完整路径,用于提供给 spring 借助反射完成的对象创建

    scope 表示单/多实例模式

    <!--    属性注入-->
    <bean id="dog" class="com.iweb.entity.Dog">
        <property name="name" value="dog01"/>
        <property name="type" value="dogType01"/>
    </bean>
    
    <!--    构造注入,利用构造函数实现注入        未解决,爆红!!!!!!!!-->
    <bean id="dog" class="com.iweb.entity.Dog">
        <constructor-arg name="name" value="dog01"/>
    </bean>
    
    <!--    空值注入,手动注入空值-->
    <bean id="dog" class="com.iweb.entity.Dog">
        <property name="name"><null/></property>
    </bean>
    
    <!--    特殊符号注入-->
    <bean id="dog" class="com.iweb.entity.Dog">
        <property name="name">
            <value><![CDATA[(-.-)]]></value>
        </property>
    </bean>
    
    <!--    外部 bean 注入(引用绑定)-->
    <bean id="dog" class="com.iweb.entity.Dog">
        <property name="name" value="dog01" />
        <property name="type" value="type01" />
    </bean>
    <bean id="person" class="com.iweb.entity.Person">
        <property name="dog" ref="dog" />
    </bean>
    
    <!--    内部 bean 注入(只能在某一个 bean 的内部访问它,其他 bean 无法访问内部bean)-->
    <bean id="person" class="com.iweb.entity.Person">
        <property name="dog">
            <bean class="com.iweb.entity.Dog">
                <property name="name" value="dog01" />
                <property name="type" value="type01" />
            </bean>
        </property>
    </bean>
    
    <!--    级联赋值-->
    <bean id="person" class="com.iweb.entity.Person">
        <property name="dog" ref="dog" />
        <property name="dog.type" value="type01" />
        <property name="dog.name" value="dog01" />
    </bean>
    <bean id="dog" class="com.iweb.entity.Dog" />
    
    <!--    集合注入 => 数组, list, map, set-->
    <bean id="person" class="com.iweb.entity.Person">
    <!--        数组注入-->
        <property name="hobbiesArray">
            <array>
                <value>games</value>
                <value>coding</value>
            </array>
        </property>
    <!--        list集合注入-->
        <property name="hobbiesList">
            <list>
                <value>games</value>
                <value>coding</value>
            </list>
        </property>
    <!--        set集合注入-->
        <property name="hobbiesSet">
            <set>
                <value>games</value>
                <value>coding</value>
            </set>
        </property>
    <!--        map集合注入-->
        <property name="hobbiesMap">
            <map>
                <entry key="games" value="游戏" />
                <entry key="coding" value="编码" />
            </map>
        </property>
    </bean>
    
    <!--    Spring中管理了两种Bean
                1. 普通Bean 在配置文件中定义的类型,与返回类型保持一致
                2. FactoryBean 在配置文件中定义的类型和返回的类型可以不一致
    		表面上是 factoryBeanDemo 类, 实际上是该类下的 dog 类
    		原理类似于 @Configuration 和 @Bean 注解
    -->
    <bean id="factoryBeanDemo" class="com.iweb.entity.FactoryBeanDemo" />
    
  2. 基于注解方式

属性值的注入(DI)

标签:Java,07,对象,Spring,创建对象,模式,bean,开发者
From: https://www.cnblogs.com/te9uila/p/17613810.html

相关文章

  • java mybatisplus @Table(typerHadler)的坑
    在使用JavaMyBatis-Plus的@Table注解时,如果使用了typerHadler属性,可能会遇到一些问题和坑。下面是一些常见的问题及其解决方案:1.设置了typerHadler属性但不起作用:如果在@Table注解中设置了typerHadler属性,但在实际使用中没有生效,可能是因为配置的类型处理器没有正确注册。请确保......
  • 遇到的情况---hadoop集群-- NodeManager启动不起来--java.io.FileNotFoundException
    情况hadoop集群nodemanager启动不起来,查看输出的日志报错java.io.FileNotFoundException:/hadoop/dfs1/log/hadoop-yarn/hadoop-cmf-yarn-NODEMANAGER-host251.log.out(Read-onlyfilesystem)管理后台点击查看NodeManager的日志文件,角色日志文件时报错访问不到。原因目录损......
  • Java 09 函数式接口
     消费者consumerimportorg.junit.Test;importjava.util.function.Consumer;publicclassconsumer{publicvoidtest02(Consumer<String>consumer){consumer.accept("abc");}@Testpublicvoidf1(){test02(s......
  • JavaScript中16进制颜色与rgb颜色互相转换
    16进制转rgbfunctionhexToRgba(hex,opacity){if(!hex)hex='#ededed';letrgba='rgba('+parseInt('0x'+hex.slice(1,3))+','+parseInt('0x'+hex.slice(3,5))+','+......
  • 【HarmonyOS】【续集】实现从视频提取音频并保存到pcm文件功能(API6 Java)
    【关键字】视频提取类Extractor、视频编解码、保存pcm文件、getAudioTime 【背景和问题】上篇中介绍了从视频提取音频并保存到pcm文件功能,请参考文档:https://developer.huawei.com/consumer/cn/forum/topic/0209125665541017202?fid=0101591351254000314,解码步骤使用的是普通......
  • Java读取Excel中的合并单元格
    1、 Maven仓库下载导入在pom.xml中配置maven路径,指定依赖,如下:<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.1</version></dependency><dependency><groupId>......
  • 【资料分享】全志科技T507-H开发板规格书
    1 评估板简介创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产工业级方案......
  • 遇到的问题----java Unsupported major.minor version 51.0
     Unsupportedmajor.minorversion51.0不同的JDK版本使用的major.minor不同,所以会导致这个错误。编译器运行的jdk选择版本和使用的jdk版本号应该对应。解决起来也很方便:打开exclipse中项目上的属性—javacompiler–选择一个合适的版本后重新编译即可。具体步骤解决:项目------......
  • 数据查询解决列名和java对象属性名对不上——三种方法
    问题描述:当使用查询语句时,返回来的数据出现null值。下面是数据库映射文件代码查询语句:<selectid="selectCarById"resultType="com.powernode.mybatis.pojo.Car">select*fromt_carwhereid=#{id}</select>下面是返回查询返回数据 原因是:查询结果集的列名:id,c......
  • SpringSecurity1: spring boot web 样例快速体验
    本文只讲操作实践,不讲原理,这样对于想快速搭建起一个基于SpringSecurity的Web项目的朋友们而言,比较友好。文章主要由两部分构成:快速演示样例所有账户和授权数据均基于内存,能在极短的时间内搭建和运行起来,可以快速体验SpringSecurity简易生产样例建议想参考原型,在自己工程中......