zoukankan      html  css  js  c++  java
  • Java——Spring(1)

     

     

     实例解析:

    人依赖车回家,Audi和Buick这两类车继承车这个接口,张三、李四继承有车一族类,有车一族类继承人类这个接口;

    首先,创建各个bean,车类接口定义了车启动、车左转、车右转的方法,Audi和Buick继承车类所以也都实现了这个接口;

    人类接口定义了一个回家的方法,有车一族类要定义有车,也就是要实例化车类,且也要实现回家的方法,被依赖的Bean要通过构造方法执行注入,所以:

    最后的张三李四要依赖车类然后重写回家方法,所以也要通过构建方法注入车类:

    最后,我们通过创建一个Ioc来创建bean、保存bean且提供bean;

     

     

     测试:

    优点:

     

     在实际用Spring进行开发时Ioc是不用那么麻烦创建的:

    首先:需要在pom.xml上引入相关的Spring支持jar包:

     然后配置一个spring.xml,里面就配置了所管理的Bean以及对应的Bean所在java文件:

     最后在使用的时候通过context获取Spring上下文就可联系xml配置文件且取出Bean:

     Spring实例化Bean:

     上面的一种就是通过构造方法实例化Bean;

    静态方法:

    首先要定义一个获取静态方法类:

     在Spring.xml上的配置是:

     最后还是通过getBean()来获取实例化,此时是通过静态方法来获取实例化Bean:

    通过实例化实例化Bean:

    将原本定义的Bean工厂类的static去掉,在Spring.xml的配置是:

     其中第一个是先实例化Bean工厂,第二个再调用工厂里的getBean方法;

    Bean的别名:如果要实例化多个对象的时候就需要定义好不同的别名来加以区分,在Spring.xml文件中:

     其中别名之间用逗号隔开,也可用<alias>来做别名,不过这个标签只能做一个别名,实现不了多个:

    注入Bean属性值

     通过构造方法注入Bean;

    首先要在Bean类提供一个构造方法:

     然后在spring.xml进行配置:

     由于我们重新构造了构造方法,所以默认的构造方法就不见了,这时在进行<bean>配置时需要输入对应的参数,即<constructor-arg>标签定义,index表示第几个参数,name表示参数名,type表示参数类型,如果参数是对象,即用ref,ref表示实例化的类,value则表示String、浮点数等的值;这里的index、name、type完全没必要都写出来,只要可以表示其参数的唯一性即可,比如index、name,而type则不可单独使用来表示参数;

    通过set方法注入Bean:

    首先要对属性进行get/set方法建立:

     然后在spring.xml进行配置:

     

    简化写法:

    在spring.xml文件中添加:

     然后c表示构造函数、p则表示属性进行配置:

     其效果是和上面的配置是一样的

    集合类型的Bean注入

    Bean类里的属性:

     spring.xml里的配置:

            <property name="stringList">
                <list>
                    <value>aaaaa</value>
                    <value>ddddd</value>
                </list>
            </property>
            <property name="anotherBeanList">
                <list>
                    <ref bean="anotherBean"></ref>
                    <ref bean="anotherBean"></ref>
                </list>
            </property>
            <property name="stringSet">
                <set>
                    <value>aaaaa</value>
                    <value>ddddd</value>
                </set>
            </property>
            <property name="anotherBeanSet">
                <set>
                    <ref bean="anotherBean"></ref>
                    <ref bean="anotherBean"></ref>
                </set>
            </property>
            <property name="stringMap">
                <map>
                    <entry key="cccc" value="ddddd"/>
                    <entry key="aaaa" value="bbbbb"/>
                </map>
            </property>
            <property name="anotherBeanMap">
                <map>
                    <entry key-ref="anotherBean" value-ref="anotherBean"/>
                    <entry key-ref="anotherBean" value-ref="anotherBean"/>
                </map>
            </property>
            <property name="properties">
                <props>
                    <prop key="aaaa">bbbb</prop>
                </props>
            </property>

    null值注入:

    注入时创建内部Bean:

    spring.xml是这样注入内部对象类的:

     先实例化对象,再通过id调用:

     如果使用注入时创建内部Bean,则可以:

    Bean作用域

     Singleton以及pritotype这两个值可以在实例化Bean时进行赋值,没设置就会默认是单例模式,通过scope属性:

     Singleton模式:单例模式,在一个上下文模式中,只会实例化一个Bean作为值赋给多个别的Bean的属性;

    prototype模式:多例模式,每次上下文请求实例过程中,都会生成新的Bean实例,即使是在同一个上下文模式中;

    举一个例子:Bean1是依赖Bean2的:

    方法注入:

    如果Bean2是多例模式,而Bean1是单例模式,我们想通Bean1得到的Bean2是不一样的实例,这个时候就需要用到方法注入,具体实现:

    自定义作用域:

    要实现一个类,继承Scope:

     可以通过重写get方法自定义作用于,如单线双例可以这样改:

     这里的name参数就是一个实例,如果没有这个实例则通过objectFactory创建一个新的,如果有了就直接返回这个实例;

    然后在spring.xml:

     SimpleThreadScope是spring内置的一个模式:单线单例模式:

    Bean的懒加载

    操作:

     场景:

     

    Bean初始化:

     Bean销毁:

     

    Bean属性继承:

    场景一:两个子类继承一个父类:

    场景二:两个类同时具有多个一样的属性:

     这样就可以大大简化重复属性的代码

    认识注解:

    通过注解简化xml配置

    xml   VS   annotation

    xml:

    annotation:

     上面这个图有点小错误:注入的BeanConfiguration.class应该是和上面定义的文件名是一致的,也就是应该改成:MyConfiguration.class。

    但是这样感觉还不是很简洁,如果有很多很多的Bean需要管理还是会产生很多代码,这个时候就用到component-scan:包扫描:

     这里component-scan后都指定一个包路径;再通过在Bean类上增加component注解来表示该Bean需要被扫描,同时为Bean添加一个id,这里只能指定一个别名,如果要指定多个可看以下内容进行别名,这个id别名可用于实例化时进行指定:

     根据不同的层有不同的标注方式:

    Bean别名

    通过注解注入Bean:

     

     

     

     

     

     

     

     

     

    通过注解设定Bean的作用域:

     

     

     

     

     

    通过注解开启Bean的懒加载:

    通过注解编写Bean的初始化及销毁

     

     

  • 相关阅读:
    RTSP视频流媒体智能分析平台EasyNVR中的H264及H265编码视频存储计算方法介绍
    RTSP协议视频平台EasyNVR内H265编码EasyWasmPlayer播放器如何优化起播时的快照功能?
    RTSP协议视频智能分析平台EasyNVR如何获取云端录像的视频快照截图?
    RTSP拉流协议视频智能分析平台EasyNVR在Chrome浏览器播放视频windows内存占用过高如何解决?
    jquery基础
    js链式编程
    js设计模式--单体模式
    js接口
    js的面向对象
    js函数
  • 原文地址:https://www.cnblogs.com/lzj-learn/p/12619454.html
Copyright © 2011-2022 走看看