Spring-Context之七:使用p-namesapce和c-namespace简化bean的定义
2014-03-25 23:23
387 查看
在Spring中定义bean的方式多种多样,即使使用xml的方式来配置也能派生出很多不同的方式。
比如如下的bean定义:
这样的bean有三行,通过使用p-namespace以后可以简化为一行。
那么什么是
上面只是演示了对属性为普通值的时使用
这是使用正常方式注入属性。
使用
加上
那既然setter方法注入bean可以使用
使用
使用
也可以使用
在前面章节讲解构造器注入时,可以使用构造参数索引来注入依赖,
怎么样,是不是很强大啊。但是太过强大也容易伤人伤己。在项目中使用这些技巧之前最好先和项目成员达成一致。
本例中的源码请在我的GitHub上自行下载。
比如如下的bean定义:
1 2 3 4 5 6 7 8 9 10 11 12 | <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="person" class="Person"> <property name="name" value="Tom"/> <property name="age" value="20"/> </bean> </beans> |
1 2 3 4 5 6 7 8 9 | <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> <bean id="person" class="Person" p:name="Tom" p:age="20"/> </beans> |
p-namespace那?它的作用就是使用xml中的元素属性取代
<property/>节点来定义bean的属性。这个神奇的p是什么东西那?它其实是使用了namespace的xml扩展配置格式。beans的配置格式是定义在一个xsd格式中的(即 http://www.springframework.org/schema/beans/spring-beans.xsd),但p却没有一个xsd格式文件与其对应,但是它可以被spring内核解析处理。
上面只是演示了对属性为普通值的时使用
p-namespace的注入,如果属性为另一个bean的引用时该如何处理那?很简单。
这是使用正常方式注入属性。
1 2 3 4 5 6 | <bean id="messageService" class="SimpleMessageService"/> <bean id="messageHandler" class="MessageHandler"> <property name="messageService"> <ref bean="messageService" /> </property> </bean> |
p-namespace后是这样的。
1 2 | <bean id="messageService" class="SimpleMessageService"/> <bean id="messageHandler" class=“MessageHandler” p:messageService-ref=“messageService”/> |
-ref后缀即表示是对一个bean的引用。
那既然setter方法注入bean可以使用
p-namespace,那么构造器方式注入有没有相应的简写那?答案是肯定的,那就是
c-namespace,原理和使用方法与
p-namespace大同小异。
使用
c-namespace前:
1 2 3 4 5 6 7 8 9 10 11 1213 | <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person" class="Person"> <constructor-arg name="name"> <value>Tom</value> </constructor-arg> <constructor-arg name="age" value="20"/> </bean> </beans> |
c-namespace后:
1 2 3 4 5 67 | <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person" c:name="Tom" c:age="20"/> </beans> |
-ref后缀来表示对另一个bean的引用。
1 2 | <bean id="messageService" class="SimpleMessageService"/> <bean id="messageHandler" class="MessageHandler" c:messageService-ref="messageService"/> |
c-namespace也支持这一方式。
1 2 3 4 5 6 7 8 9 10 11 12 | <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person” c:_0="Tom" c:_1="20"/> <bean id="messageService" class="SimpleMessageService"/> <bean id="messageHandler" class="MessageHandler" c:_0-ref="messageService"/> </beans> |
本例中的源码请在我的GitHub上自行下载。
相关文章推荐
- 使用p-namesapce和c-namespace简化bean的定义
- Spring-Context之九:在bean定义中使用继承
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- Use Namesapce 使用方法简介
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- 【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3
- Spring学习笔记 关于Bean定义的重用-使用abstract以及parent标签属性
- 【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3
- 使用Spring注解完成Bean的定义
- Spring入门学习——使用工厂Bean和Utility Schema定义集合
- spring笔记6---使用命名空间p简化bean的属性赋值
- 【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3
- Spring IOC--Bean的装配(使用注解定义Bean)
- 使用SpringContextHolder获取bean实例
- 使用Spring注解完成Bean的定义
- Spring使用Java类定义Bean信息
- 在完全由Spring管理的环境中使用Spring的Context获取Bean实例
- 【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3
- Spring表达式语言 之 5.4在Bean定义中使用EL(拾伍)
- Spring-Context之三:使用XML和Groovy DSL配置Bean