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

spring学习第二天


使用spring容器的好处(IOC和DI的意义)

  • 客户端在使用时不用关注具体实现,完全面向接口编程,具体实现类有些配置文件的人来管

    applicationContext context = new classPathXmlApplicationContext("applicationContext");
    
    DocumentManager documentManager = new (DocumentManager)context.getBean("documentManager");
    

spring创建对象方法

  • 构造函数(用的最多)

  • 静态工厂

  • 实例工厂


  • 在默认情况下,spring产生的对象是单例的

  • prototype 原型模式(多例模式)

  • 如果scope = "prototype" 那么lazy-init将失去作用


spring容器创建对象的时间

方案1

1 加载spring容器
2 spring调用默认的构造函数为bean创建对象
3 利用context.getbean()将对象提取出来
4 好处:在启动spring容器的时候可以发现错误

方案2

1 启动spring容器
2 执行context.getbean
3 spring为bean创建对象
4 坏处:在启动spring容器的时候不能发现错误


spring容器init destroy

default

1 启动spring容器
2 创建对象
3 执行init方法 该方法是由spring容器自动调用的
4 context.getbean将对象提取出来
5 对象调用方法
6 当执行close方法的时候,执行该对象destroy方法 该方法是由spring容器自动调用的

scope="prototype"

1 启动spring容器
2 context.getbean将对象提取出来
3 创建对象
4 执行init方法 该方法是由spring容器自动调用的
5 对象调用方法
6 不负责销毁


DI(依赖注入-xml方式)-给属性装配值

setter方法注入

  • property描述的就是bean中的属性

  • name就是属性名称

  • value就是属性值 如果基本类型(包含string)就用value赋值

  • ref 如果是引用类型就用ref赋值

  • 给属性赋值的过程称为装配

  • map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法

加断点来弄清加载顺序(构造函数, 方法)

  • list装配

    
        <property name="lists">
            <list>
                <value>l1</value>
                <ref bean = "person"/>
            </list>
        </property>
    
  • set装配

    
        <property name="sets">
            <set>
                <value>l1</value>
                <ref bean = "person"/>
            </set>
        </property>
    
  • map装配

    
        <property name="maps">
            <map>
                <entry key="01">
                    <value>m1</value>
                </entry>
                <entry key="02">
                    <ref bean = "person"/>
                </entry>
            </map>
        </property>
    
  • properties装配

    
        <property name="props">
            <props>
                <prop key="01">p1</prop>
                <prop key="02">p2</prop>
            </props>
        </property>
    
  • 依赖的优先级比scope高

构造器方法注入

  • constructor-arg 代表某个构造器参数

  • index 构造器参数的下标

  • value

  • ref

  • type 类型

  • <bean id= "person" class = "com.baisong.person">
        <constructor-arg index = "0" value = "aaaa" type = "java.lang.long"></constructor-arg>
        <constructor-arg index = "1" ref = "student"></constructor-arg>
    </bean>

  • setter与init的执行顺序

    public class DIXMLSetterInitDetroyTest {
       /**
        * 1、启动spring容器
        * 2、实例化person,student
        * 3、调用person的setter方法进行装配
        * 4、调用person的init方法
        * 5、context.getBean
        * 6、person调用方法完成任务
        */
       @Test
       public void testDI_XML_Setter_InitDestroy(){
           ApplicationContext context = 
                   new ClassPathXmlApplicationContext("applicationContext.xml");
           Person person = (Person)context.getBean("person");
           System.out.println(person.toString());
       }
       }

可以同时使用set方法和构造函数方法注入

图片描述


相关文章:

  • 翻译研讨VOA时事报道20091107 Karzai的第二次选举;美国失业率达10.2%
  • redis持久化RDB和AOF
  • pgadmin 的安装
  • IT技术风向标
  • Linux查看是否被入侵
  • 如何正确地处理时间
  • 博为峰Java技术题 ——JavaSE Java JDBC数据库查询代码实例
  • 台湾富士康捐10亿助力清华
  • 缓存与缓冲
  • 一个JAVA程序员的成长经历
  • 记萌新赛的命题过程与踩气球过程
  • Mysql的连接状态
  • java集合类(二)
  • 对OpenCV中Haar特征CvHaarClassifierCascade等结构理解
  • 《代码整洁之道》读书笔记
  • 深入了解以太坊
  • 2019.2.20 c++ 知识梳理
  • Brief introduction of how to 'Call, Apply and Bind'
  • ES6 ...操作符
  • Git初体验
  • JavaScript-Array类型
  • JavaScript服务器推送技术之 WebSocket
  • Javascript设计模式学习之Observer(观察者)模式
  • JS字符串转数字方法总结
  • leetcode讲解--894. All Possible Full Binary Trees
  • Logstash 参考指南(目录)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 诡异!React stopPropagation失灵
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 检测对象或数组
  • 简单数学运算程序(不定期更新)
  • 类orAPI - 收藏集 - 掘金
  • 理解在java “”i=i++;”所发生的事情
  • 我有几个粽子,和一个故事
  • No resource identifier found for attribute,RxJava之zip操作符
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 正则表达式-基础知识Review
  • ​ssh免密码登录设置及问题总结
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (7)STL算法之交换赋值
  • (笔试题)分解质因式
  • (二十三)Flask之高频面试点
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • .gitignore
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET构架之我见
  • /etc/sudoers (root权限管理)