什么是名称空间?

作用:Schema区分同名元素。(有点类似于java的包)

回顾:Xmlns没有前缀是默认的名称空间。

为简化XML文件的配置,Spring2.5版本开始引入了一个新的p名称空间。简单的说,它的作用是为了简化setter方法属性依赖注入配置的,它不是真正的名称空间。

它的使用方法:

p:<属性名>="xxx" 引入常量值

p:<属性名>-ref="xxx" 引用其它Bean对象

操作步骤:

第一步:引入p名称空间

<beans xmlns="http://www.springframework.org/schema/beans"

 xmlns:p="http://www.springframework.org/schema/p"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

第二步:将<property> 子元素 简化为 元素的属性注入

<!-- 使用p名称空间简化setter方法属性注入 -->

<!--

p:name:简单数据类型的属性注入

P:car-ref:复杂数据类型(bean)的属性注入

-->

<bean id="person2" class="com.igeek.xmlpropertydi.Person" p:id="1002" p:name="关羽" p:car-ref="car"/>

第三步:测试

@Test

public void test2(){

//spring容器

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

Person person2=(Person)applicationContext.getBean("person2");

System.out.println(person2);

}

配置时不需要<property > 子元素,简化了配置 .

spEL表达式的使用 –会用即可

spEL(Spring Expression Language)是一种表达式语言,它是spring3.x版本的新特性。

它的作用是:支持在运行时操作和查询对象,其语法类似统一的EL语言,但是SpEL提供了额外的功能,功能更强大。

【面试题】什么是EL、OGNL、spEL?

EL:操作servlet相关的一些对象和相关的值,${request.name}

OGNL:主要操作struts2值栈,<s:property value=”#request.name”>

spEL:操作bean相关的

语法: #{…} , 引用另一个Bean 、属性、 方法

SpEL表达式的使用功能比较多,Bean操作相关的通常有:

  1. #{beanid} 引用Bean(具体对象)
  2. #{beanId.属性} 引用Bean的属性
  3. #{beanId.方法(参数)} 调用Bean的方法

案例一:配置applicationContext.xml

<!-- spEL表达式 -->

<!-- car.name相当于car.getName() -->

<bean id="person3" class="com.igeek.xmlpropertydi.Person" p:id="#{car.id}" p:name="#{car.name}" p:car="#{car}"/>

如果抛出异常:

需要在Car对象中调用getId和getName的方法,获取id和name的属性值,然后赋值到Person对象name的属性中。

public class Car {

//取值要用getter

public Integer getId(){

return this.id;

}

public String getName(){

return this.name;

}

}

案例二:配置applicationContext.xml

<!-- spEL表达式 -->

<!-- car.id相当于car.getId() -->

<bean id="person4" class="com.igeek.xmlpropertydi.Person" p:id="#{1+1}" p:name="#{'Jack'.toUpperCase()}" p:car="#{car}"/>

=========================================示例==================================================

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置两个主板对象 -->
<bean id="board1" class="com.igeek.MainBoard"><!-- 通过构造方法设置属性 --><!-- 一旦配置了constructor-arg spring就不会再使用无参数的构造方法,而是使用对应的有参数的构造方法name:构造方法参数的名称value:配置的值  只有参数值为基本数据类型和String的时候,才可以使用value。--><constructor-arg name="brand" value="华硕"/><constructor-arg name="size"><value>500</value></constructor-arg>
</bean>
<bean id="board2" class="com.igeek.MainBoard"><!-- index配置参数的索引,从0开始 --><constructor-arg index="0" value="华擎"/>
</bean><!-- 配置一台电脑 -->
<bean id="com1" class="com.igeek.Computer"><constructor-arg index="0" value="鸿基"/><constructor-arg index="1" value="5000"/><!-- 当参数类型为引用数据类型时(String除外)需要使用ref执行另外一个Bean --><constructor-arg index="2" ref="board1"/>
</bean><!-- ******************************* --><!-- 通过set和get方法注入属性 -->
<bean id="board3" class="com.igeek.MainBoard"><property name="brand" value="戴尔"/><property name="size" value="100"/>
</bean><bean id="com2" class="com.igeek.Computer"><property name="brand" value="戴尔"/><property name="price"><value>6000</value></property><!-- 注入引用数据类型,使用Spring容器中的其他对象 --><property name="board" ref="board3"/>
</bean><!-- 使用p -->
<bean id="com3" class="com.igeek.Computer" p:brand="联想" p:price="10000" p:board-ref="board2"/>
<!-- spEL -->
<bean id="com4" class="com.igeek.Computer" p:brand="#{com3.brand}" p:price="#{com3.price}" p:board="#{com3.board}"/>
</beans>

Spring IOC p名称空间的使用-了解相关推荐

  1. 转载:Spring使用p名称空间配置属性

    这篇博客简明扼要地介绍了Spring中p命名空间的使用,笔者在此转载一下. 原文链接:https://blog.csdn.net/liaomin416100569/article/details/49 ...

  2. Spring IOC容器【p名称空间注入属性值 】

    # p 名称空间给对象的属性注入值(spring3.0以上版本才支持) 需要引入: xmlns:p="http://www.springframework.org/schema/p" ...

  3. spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码

    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过 ...

  4. spring配置详解-属性注入(p名称空间SPEL表达式)

    所谓了解的话讲了一般是不会用的,看一下了解的注入方式,还有一种叫p名称空间注入方式,是Spring最近发出来的,因为Bean注入方式已经深入人心了,所以后面这两种注入方式,哪怕是好,也不愿意去用,因为 ...

  5. [Spring5]IOC容器_Bean管理XML方式_p名称空间注入

    iii.第三种注入方式:p名称空间注入 bean: package com.atguigu.spring;/*** 演示使用set方法进行注入属性*/ public class Book {priva ...

  6. Spring Integration Java DSL示例–使用Jms名称空间工厂进一步简化

    在较早的博客文章中,我谈到了虚拟卢布·戈德堡流程,该流程通过一系列复杂的步骤将字符串变成大写,本文的前提是引入Spring Integration Java DSL,作为通过xml配置文件定义集成流程 ...

  7. IOC操作Bean管理XML方式(P名称空间注入)

    P名称空间注入(用的不多,但是也是一种方式) 目录 P名称空间注入(用的不多,但是也是一种方式) (1)使用P名称空间注入,可以简化基于xml 配置方式 第一步:添加p 名称空间在配置文件中(和上面的 ...

  8. Spring IoC、AOP、Transaction、MVC 归纳小结

    前言 如果说有什么框架是Java程序员必然会学习.使用到的,那么Spring肯定是其中之一.本篇博客,将根据博主在日常工作中对Spring的使用做一个系统的归纳小结. Spring的一些概念和思想 S ...

  9. Spring IOC容器-注解的方式

    注解方式可以简化spring的IOC容器的配置,但不利于后期维护,对象之间的依赖关系不能像xml文件一样方便查阅,一目了然. 注解可以和XML配置一起使用. 使用注解步骤: 1)先引入context名 ...

最新文章

  1. 聊聊 iOS 中的网络加密
  2. Linux 运维工程师的十个基本技能点
  3. word2vec安装以及使用
  4. app分发平台java_集成 Asset Delivery (Java)
  5. 这篇 CPU Cache,估计要消化一下
  6. 【剑指offer】面试题25:合并两个排序的链表(Java)
  7. JavaScript 中的 this
  8. springmvc initial初始化
  9. C#自学总结_Day2
  10. QGIS导入postgresql数据库shp数据
  11. 编译原理实验二 语法分析程序设计与实现
  12. GAMES101-现代计算机图形学入门-闫令琪 - lecture11 几何3(Geometry 3) - 课后笔记
  13. Java多线程系列--【JUC集合10】- ConcurrentLinkedQueue
  14. 一个推理问题:求老师生日
  15. 示例填充图片_填充内容:工具,技巧和动态示例
  16. 英特尔服务器cpu型号大全,Intel桌面处理器规格表
  17. 硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
  18. 物联网大数据平台功能有哪些
  19. 语义计算_语义多态性如何在量子计算中起作用
  20. php xmp,xmp可以一直开着吗

热门文章

  1. H5 --力导向图、关系图谱
  2. 2017-2018-2 20179205 《网络攻防技术与实践》第八周作业
  3. [AHOI 2009]chess 中国象棋
  4. MEF入门之不求甚解,但力求简单能讲明白(四)
  5. Randomized Cuts for 3D Mesh Analysis (SIGGRAPH Asia 08)
  6. 分享两个Mysql在线全备和binlog日志备份脚本
  7. (工作中)Apache常见配置
  8. CentOS下rsync数据同步备份
  9. 高等数学(工本)填空题
  10. 根据一览,自动生成Sheet页