Spring-注入参数详解-[简化配置方式]

简介: Spring-注入参数详解-[简化配置方式]

概述


Spring为字面值、引用Bean和集合都提供了简化的配置方式,如果没有用到完整格式的特殊功能,大可使用简化的配置方式。


字面属性值

字面值属性

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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="plane" class="com.xgj.ioc.inject.set.Plane">
    <!-- 
        <property name="brand">
            <value>Airbus&amp;A380</value>
        </property>
        <property name="color">
            <value>red</value>
        </property>
        <property name="speed">
            <value>700</value>
        </property>
    --> 
    <!-- 简化配置方式 -->
    <property name="brand" value="Airbus&amp;A380"/>
    <property name="color" value="red"/>
    <property name="speed" value="700"></property>
    </bean>
</beans>


使用简化方式,则无法使用

构造函数参数

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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="tank" class="com.xgj.ioc.inject.construct.type.Tank">
        <!-- 
        <constructor-arg type="java.lang.String">
            <value>T72</value>
        </constructor-arg>
        <constructor-arg type="double">
            <value>20000.00</value>
        </constructor-arg>
         -->
         <!-- 简化方式 -->
         <constructor-arg type="java.lang.String"  value="T72"/>
         <constructor-arg  type="double" value="20000.00"/>
    </bean>
</beans>

集合元素

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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="pets" class="com.xgj.ioc.inject.construct.jihe.strongType.Pets">
        <property name="map">
        <!--  
            <map>
                <entry>
                    <key>
                        为Integer提供值,spring在设置值时,会转换为定义的Integer类型 
                        <value>111</value>
                    </key>
                    <value>cat</value>
                </entry>
                <entry>
                    <key>
                        <value>113</value>
                    </key>
                    <value>bird</value>
                </entry>
                <entry>
                    <key>
                        <value>115</value>
                    </key>
                    <value>dog</value>
                </entry>
            </map>
            -->
        <!-- 简化方式 -->
            <map>
                <entry key="111" value="cat"/>
                <entry key="113" value="bird"/>
                <entry key="115" value="dog"/>
            </map>
        </property>
    </bean>
    <bean id="petShop" class="com.xgj.ioc.inject.construct.jihe.strongType.PetShop">
        <property name="pets" ref="pets" />
    </bean>
</beans>


引用对象属性

字面值属性

复杂的方式

<property name="plane">
    <ref bean="plane"/>
</property>

简化的方式

<property name="plane" ref="plane"/>


构造函数参数

复杂的方式

<constructor-arg>
    <ref bean="plane">
</constructor-arg>


简化的方式

<constructor-arg ref="plane">


集合元素

复杂的方式

<map>
    <entry>
        <key>
            <ref bean="keyBean"/>
        </key>
        <ref bean="valueBean"/>
    </entry>
</map>


简化的方式

<map>
    <entry key-ref="keyBena" value-ref="valueBean"/>
</map>


ref标签的简化形式对应于<ref bean="xxx"><ref local="xxx"><ref parent="xxx"> 没有对应的简化形式


使用P命名空间


Spring2.5版本之后引入了新的p命名空间,可以通过bean元素属性的方式配置bean的属性。

使用p命名空间后,基于XML的配置方式将进一步简化。

需要引入

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


通过p命名空间引用字面属性值

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    引入p命名空间
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 使用p命名空间 -->
    <bean id="plane" class="com.xgj.ioc.inject.set.Plane"
        p:brand="Airbus&amp;A380"
        p:color="red"
        p:speed="700"
    >
    </bean>
</beans>


通过p命名空间引用其他bean

<?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="police" class="com.xgj.ioc.inject.construct.ref.Police">
        <property name="gun">
             通过ref应用容器中的gun ,建立police和gun的依赖关系 
            <ref bean="gun" />
        </property>
    </bean>
     -->
     <!-- 使用p命名空间  引用其他bean-->
    <bean id="police" class="com.xgj.ioc.inject.construct.ref.Police"
        p:gun-ref="gun"/>
    <bean id="gun" class="com.xgj.ioc.inject.construct.ref.Gun" />
</beans>


未采用p命名空间前,<bean>使用<property>子元素配置Bean的属性,

采用p命名空间后,采用<bean>的元素属性配置Bean的属性。

对于字面值属性,其格式为

p:<属性名>-ref="xxx"


对已引用对象的属性,其格式为:

p:<属性名>-ref="xxx"


正是由于p命名空间中的属性名是可变的,所以p命名空间没有对应的schema定义文件,也无需在xsi:schemaLocation中为p命名空间指定Schema定义文件.

相关文章
|
20天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
23天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
32 0
|
16天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
26天前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
44 1
Spring MVC——获取参数和响应
|
8天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
21 1
|
24天前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
110 1
|
Java Spring 前端开发
spring 3.2 自定义参数绑定--日期格式转换器
springmvc配置文件 &lt;!-- 代替org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 和org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter --&gt;
2438 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
30天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
149 2
|
3天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
11 2
 SpringBoot入门(7)- 配置热部署devtools工具
下一篇
无影云桌面