(一)Spring的IOC学习

  在applicationContext.xml来配置bean,通过该接口,在主程序中,可以指定初始化的对象,不需要在进行赋值操作,直接在xml里配置好。

接下来分享的是bean配置的多种方法:

①通过类的id获取bean

  1. <bean id="user" class="com.author.bean.user">
  2. <property name="name" value="Spring"></property>
  3. <property name="age" value="18"></property>
  4. <property name="sex" value="男"></property>
  5. </bean>

在主函数中,通过容器里的id来获取bean对象

  1. ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");
  2. user beanUser=(user)aContext.getBean("user");
  3. beanUser.print();

输出该对象的信息:

②通过类型获取bean,缺点是只能是一个该类型的bean对象,如果有多个则会出错,多个可以通过id的方式来进行获取

例如上面的user对象,在主函数中可以这样获取:

  1. ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");
  2. user beanUser=aContext.getBean(user.class);
  3. beanUser.print();

得到的结果和上面的一样

二、给bean的属性赋值多种操作

①直接通过<property name="name" value="Spring"></property>利用name,value的方式进行赋值

②通过构造器进行赋值,前提在bean类中有该构造函数

  1. <bean id="user03" class="com.author.bean.user">
  2. <constructor-arg name="name" value="小明"></constructor-arg>
  3. <constructor-arg name="age" value="18"></constructor-arg>
  4. <constructor-arg name="sex" value="男"></constructor-arg>
  5. </bean>

还可以直接省略name属性:

  1. <!-- 省略name属性 -->
  2. <bean id="user04" class="com.author.bean.user">
  3. <constructor-arg value="校花"></constructor-arg>
  4. <constructor-arg value="10"></constructor-arg>
  5. <constructor-arg value="女"></constructor-arg>
  6. </bean>

通过索引值指定参数位置

  1. <bean id="book" class="com.atguigu.spring.bean.Book" >
  2.            <constructor-arg value= "10010" index ="0"/>
  3.            <constructor-arg value= "Book01" index ="1"/>
  4.            <constructor-arg value= "Author01" index ="2"/>
  5.            <constructor-arg value= "20.2" index ="3"/>
  6.      </bean >

通过类型不同区分重载的构造器

  1. <bean id="book" class="com.atguigu.spring.bean.Book" >
  2.       <constructor-arg value= "10010" index ="0" type="java.lang.Integer" />
  3.       <constructor-arg value= "Book01" index ="1" type="java.lang.String" />
  4.       <constructor-arg value= "Author01" index ="2" type="java.lang.String" />
  5.       <constructor-arg value= "20.2" index ="3" type="java.lang.Double" />
  6. </bean >

p名称空间:为了简化XML文件的配置,越来越多的XML文件采用属性而非子元素配置信息。

需要导入:xmlns:p="http://www.springframework.org/schema/p"

  1. <bean
  2. id="studentSuper"
  3. class="com.atguigu.helloworld.bean.Student"
  4. p:studentId="2002" p:stuName="Jerry2016" p:age="18" />

三、内部bean对象以及引用对象

通过<null/>指定空元素

引用对象的使用:ref=“引用外部对象的id”

  1. <bean id="car01" class="com.author.bean.car">
  2. <constructor-arg value="宝马" ></constructor-arg>
  3. <constructor-arg value="蓝白色"></constructor-arg>
  4. <constructor-arg value="30000"></constructor-arg>
  5. </bean>
  6.  
  7. <bean id="user05" class="com.author.bean.user">
  8. <property name="name">
  9. <null></null>
  10. </property>
  11. <!-- ref引用的是外部的bean -->
  12. <property name="car" ref="car01"></property>
  13. </bean>

内部bean对象:相当于car=new car(),car对象在user对象里

  1. <bean id="car01" class="com.author.bean.car">
  2. <constructor-arg value="宝马" ></constructor-arg>
  3. <constructor-arg value="蓝白色"></constructor-arg>
  4. <constructor-arg value="30000"></constructor-arg>
  5. </bean>
  6.  
  7. <bean id="user05" class="com.author.bean.user">
  8. <property name="name">
  9. <null></null>
  10. </property>
  11. <!-- 相当于car=new car() 引用内部bean -->
  12. <property name="car">
  13. <bean class="com.author.bean.car">
  14. <property name="name" value="自行车"></property>
  15. </bean>
  16. </property>
  17. </bean>

四、集合属性

①List和map

List集合里包括:一个自定义的对象,一个引用对象。

  配置java.util.List类型的属性,需要指定<list>标签,在标签里包含一些元素。

  这些标签可以通过<value>指定简单的常量值,通过<ref>指定对其他Bean的引用。

  通过<bean>指定内置bean定义。通过<null/>指定空元素。

Map集合里包括:2个value,一个引用,一个自定义对象,都对应着不同的key值

  <map>标签里可以使用多个<entry>作为子标签。每个条目包含一个键和一个值。

  必须在<key>标签里定义键。

  因为键和值的类型没有限制,所以可以自由地为它们指定<value>、<ref>、<bean>或<null/>元素。

  可以将Map的键和值作为<entry>的属性定义:简单常量使用key和value来定义;bean引用通过key-ref和value-ref属性定义。

  1. <bean id="refbook" class="com.author.bean.Book">
  2. <property name="name" value="西厢记"></property>
  3. </bean>
  4.  
  5. <bean id="user06" class="com.author.bean.user">
  6. <property name="books">
  7. <list>
  8. <!-- list标签体中添加每一个元素 -->
  9. <bean class="com.author.bean.Book">
  10. <property name="name" value="西游记"></property>
  11. <property name="author" value="吴承恩"></property>
  12. <property name="price" value="80"></property>
  13. </bean>
  14. <ref bean="refbook"></ref>
  15. </list>
  16. </property>
  17. <property name="maps">
  18. <map>
  19. <entry key="key01" value="张三"></entry>
  20. <entry key="key02" value="18"></entry>
  21. <entry key="key03" value-ref="refbook"></entry>
  22. <entry key="key04">
  23. <bean class="com.author.bean.car">
  24. <property name="name" value="宝马">
  25. </property>
  26. </bean>
  27. </entry>
  28. </map>
  29. </property>
  30. </bean>

在主函数中,输出结果:

  1. user beanUser2=(user)aContext.getBean("user06");
  2. System.out.println(beanUser2.books);
  3. System.out.println(beanUser2.maps);

结果为:

②Properties

使用<props>定义java.util.Properties,该标签使用多个<prop>作为子标签。每个<prop>标签必须定义key属性

  1. <bean class="com.atguigu.spring.bean.DataSource" id="dataSource">
  2. <property name="properties">
  3. <props>
  4. <prop key="userName">root</prop>
  5. <prop key="password">root</prop>
  6. <prop key="url">jdbc:mysql:///test</prop>
  7. <prop key="driverClass">com.mysql.jdbc.Driver</prop>
  8. </props>
  9. </property>
  10. </bean>

③集合类型的bean

如果只能将集合对象配置在某个bean内部,则这个集合的配置将不能重用。我们需要将集合bean的配置拿到外面,供其他bean引用。

配置集合类型的bean需要引入util名称空间:xmlns:util="http://www.springframework.org/schema/util"

  1. <util:map id="myMap">
  2. <entry key="key01" value="张三"></entry>
  3. <entry key="key02" value="18"></entry>
  4. <entry key="key03" value-ref="refbook"></entry>
  5. <entry key="key04">
  6. <bean class="com.author.bean.car">
  7. <property name="name" value="宝马">
  8. </property>
  9. </bean>
  10. </entry>
  11. </util:map>
  12.  
  13. <util:list id="myList">
  14. <bean class="com.author.bean.Book"></bean>
  15. <value>12</value>
  16. <ref bean="myMap"></ref>
  17. </util:list>

五、级联属性

含义:可以控制属性的属性

可以改变user07下的car的price属性,如果car为引用对象,那么引用对象也会被修改

  1. <!-- 级联属性可以控制属性的属性 -->
  2. <bean id="user07" class="com.author.bean.user">
  3. <property name="car" ref="car01"></property>
  4. <property name="car.price" value="900000"></property>
  5. </bean>

--------------这就是今天分享的bean的配置操作。

明天学习:利用工厂来创建bean

Spring的IOC容器学习笔记的更多相关文章

  1. spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)

    Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...

  2. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  3. Unity(IOC)学习笔记

    原文:Unity(IOC)学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/79432 ...

  4. Spring的IOC容器第一辑

    一.Spring的IOC容器概述 Spring的IOC的过程也被称为依赖注入(DI),那么对象可以通过构造函数参数,工厂方法的参数或在工厂方法构造或返回的对象实例上设置的属性来定义它们的依赖关系,然后 ...

  5. 好莱坞原则—Spring的IOC容器

    IOC容器的概念,之前在学习SSH的时候,就有接触过.但那时候也仅仅是知道这么个概念,认为它非常难理解.事实上并非它难理解,而是我并没有停下来好好对它总结梳理过. IOC(Inversion of C ...

  6. Spring的IoC容器(转)BeanFactory

    Spring的IoC容器 Spring读书笔记-----Spring的Bean之Bean的基本概念 加菲猫 Just have a little faith. Spring的IoC容器 (用户持久化类 ...

  7. Spring Cloud微服务学习笔记

    Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...

  8. Spring 深入——IoC 容器 01

    IoC容器的实现学习--01 目录 IoC容器的实现学习--01 简介 IoC 容器系列的设计与实现:BeanFactory 和 ApplicationContext BeanFactory load ...

  9. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

随机推荐

  1. Python中的BeautifulSoup库简要总结

    一.基本元素 BeautifulSoup库是解析.遍历.维护“标签树”的功能库. 引用 from bs4 import BeautifulSoup import bs4 html文档-标签树-Beau ...

  2. javascript设计模式--策略模式

    javascript策略模式总结 1.什么是策略模式? 策略模式的定义是:定义一系列的算法,把他们独立封装起来,并且可以相互替换. 例如我们需要写一段代码来计算员工的奖金.当绩效为a时,奖金为工资的5 ...

  3. 前端性能优化之Lazyload

    前端性能优化之Lazyload @(Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中,界面和效果正在变得越来越狂拽炫酷,与此同时性能也是不得 ...

  4. CSS-水平居中、垂直居中、水平垂直居中

    1.水平居中 水平居中可分为行内元素水平居中和块级元素水平居中 1.1 行内元素水平居中 这里行内元素是指文本text.图像img.按钮超链接等,只需给父元素设置text-align:center即可 ...

  5. Error response:/usr/bin/tf_serving_entrypoint.sh: line 3: 6 Illegal instruction (core dumped) ...

    用docker部署tensorflow-serving:gpu时,参照官方文档:https://tensorflow.google.cn/tfx/serving/docker 本应该是很简单的部署,没 ...

  6. Hadoop fs 基础命令

    操作hdfs的基本命令 在hdfs中,路径需要用绝对路径 1. 查看根目录 hadoop fs -ls / 2. 递归查看所有文件和文件夹 -lsr等同于-ls -R hadoop fs -lsr / ...

  7. vue-element-admin 模板 登录页面 post请求通过django的csrf认证,处理304错误

    经过一天的研究,终于把 vue-admin-template 模板的 post 请求 和django的api 弄通了 没有了那该死的304报错了 直接贴代码: 在main.js中 我直接给设置了一个 ...

  8. vue-cli实现最简单的全选、全不选、反选功能。不容错过呦!!!!!话不多说直接上代码。。。。

    <template> <div class="hello"> <input type="button" name="al ...

  9. Learn Regex The Easy Way

    GitHub上的正则表达式在线学习Learn Regex The Easy Way,可以帮助初学者快速入门 该项目已汉化,可在线练习 地址:https://github.com/ziishaned/l ...

  10. 序列化器:ModelSerializer

    ModelSerializer 类提供了一个快捷方式,可让你基于 Models 自动创建一个 Serializer 类,其中的字段与模型类字段对应. ModelSerializer 类与常规 Seri ...