Spring IOC p名称空间的使用-了解
什么是名称空间?
作用: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操作相关的通常有:
- #{beanid} 引用Bean(具体对象)
- #{beanId.属性} 引用Bean的属性
- #{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名称空间的使用-了解相关推荐
- 转载:Spring使用p名称空间配置属性
这篇博客简明扼要地介绍了Spring中p命名空间的使用,笔者在此转载一下. 原文链接:https://blog.csdn.net/liaomin416100569/article/details/49 ...
- Spring IOC容器【p名称空间注入属性值 】
# p 名称空间给对象的属性注入值(spring3.0以上版本才支持) 需要引入: xmlns:p="http://www.springframework.org/schema/p" ...
- spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码
IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过 ...
- spring配置详解-属性注入(p名称空间SPEL表达式)
所谓了解的话讲了一般是不会用的,看一下了解的注入方式,还有一种叫p名称空间注入方式,是Spring最近发出来的,因为Bean注入方式已经深入人心了,所以后面这两种注入方式,哪怕是好,也不愿意去用,因为 ...
- [Spring5]IOC容器_Bean管理XML方式_p名称空间注入
iii.第三种注入方式:p名称空间注入 bean: package com.atguigu.spring;/*** 演示使用set方法进行注入属性*/ public class Book {priva ...
- Spring Integration Java DSL示例–使用Jms名称空间工厂进一步简化
在较早的博客文章中,我谈到了虚拟卢布·戈德堡流程,该流程通过一系列复杂的步骤将字符串变成大写,本文的前提是引入Spring Integration Java DSL,作为通过xml配置文件定义集成流程 ...
- IOC操作Bean管理XML方式(P名称空间注入)
P名称空间注入(用的不多,但是也是一种方式) 目录 P名称空间注入(用的不多,但是也是一种方式) (1)使用P名称空间注入,可以简化基于xml 配置方式 第一步:添加p 名称空间在配置文件中(和上面的 ...
- Spring IoC、AOP、Transaction、MVC 归纳小结
前言 如果说有什么框架是Java程序员必然会学习.使用到的,那么Spring肯定是其中之一.本篇博客,将根据博主在日常工作中对Spring的使用做一个系统的归纳小结. Spring的一些概念和思想 S ...
- Spring IOC容器-注解的方式
注解方式可以简化spring的IOC容器的配置,但不利于后期维护,对象之间的依赖关系不能像xml文件一样方便查阅,一目了然. 注解可以和XML配置一起使用. 使用注解步骤: 1)先引入context名 ...
最新文章
- 聊聊 iOS 中的网络加密
- Linux 运维工程师的十个基本技能点
- word2vec安装以及使用
- app分发平台java_集成 Asset Delivery (Java)
- 这篇 CPU Cache,估计要消化一下
- 【剑指offer】面试题25:合并两个排序的链表(Java)
- JavaScript 中的 this
- springmvc initial初始化
- C#自学总结_Day2
- QGIS导入postgresql数据库shp数据
- 编译原理实验二 语法分析程序设计与实现
- GAMES101-现代计算机图形学入门-闫令琪 - lecture11 几何3(Geometry 3) - 课后笔记
- Java多线程系列--【JUC集合10】- ConcurrentLinkedQueue
- 一个推理问题:求老师生日
- 示例填充图片_填充内容:工具,技巧和动态示例
- 英特尔服务器cpu型号大全,Intel桌面处理器规格表
- 硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
- 物联网大数据平台功能有哪些
- 语义计算_语义多态性如何在量子计算中起作用
- php xmp,xmp可以一直开着吗