Spring4.0 xml显示配置(构造器参数注入,属性注入)
2017-01-06 12:04
393 查看
项目目录:
运行test 控制台输出:
i am ctbean
i am abbean
I am anotation 注入的字符串
我是注入集合1
我是注入集合2
paraBean.AnoBean@40c06c8b
paraBean.CtBean@19163ae3
-----------------------------
-----------------------------
i am ctbean
i am 属性字符串
属性字符串1
属性字符串2
paraBean.AnoBean@40c06c8b
paraBean.CtBean@19163ae3
现在xml中的配置用c 和p标签分别来代替 construct 和property 属性标签:
此时xml头部为
package paraBean; public class AnoBean { void play(){ System.out.println("i am abbean"); } }
package paraBean; public class CtBean { void play(){ System.out.println("i am ctbean"); } }
package paraBean; public interface Disk { void play(); }
package paraBean; import java.util.List; public class JayDiskImpl implements Disk { //注入bean,字符串,集合三种类型 private CtBean cb; private AnoBean ab; private String str; private List<String>strlist; private List<Object>blist; //以上用于构造器注入属性 //以下用于setter属性注入 private CtBean cbn; private String setStr; private List<String>setStrlist; private List<Object>setObjlist; public CtBean getCbn() { return cbn; } public void setCbn(CtBean cbn) { this.cbn = cbn; } public String getSetStr() { return setStr; } public void setSetStr(String setStr) { this.setStr = setStr; } public List<String> getSetStrlist() { return setStrlist; } public void setSetStrlist(List<String> setStrlist) { this.setStrlist = setStrlist; } public List<Object> getSetObjlist() { return setObjlist; } public void setSetObjlist(List<Object> setObjlist) { this.setObjlist = setObjlist; } public JayDiskImpl(CtBean cb,AnoBean ab,String str,List<String>strlist,List<Object>blist){ this.cb=cb; this.ab=ab; this.str=str; this.strlist=strlist; this.blist=blist; } public void play() { cb.play(); ab.play(); System.out.println("I am anotation "+str); for(int i=0;i<strlist.size();i++){ System.out.println(strlist.get(i)); } for(int i=0;i<blist.size();i++){ System.out.println(blist.get(i)); } System.out.println("-----------------------------"); System.out.println("-----------------------------"); cbn.play(); System.out.println(setStr); for (int i = 0; i <setStrlist.size(); i++) { System.out.println(setStrlist.get(i)); } for (int i = 0; i <setObjlist.size(); i++) { System.out.println(setObjlist.get(i)); } } }
package paraBean; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("application.xml"); ac.getBean("jd", JayDiskImpl.class).play(); } }
<?xml version="1.0" encoding="UTF-8"?> <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" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <bean id="cb" class="paraBean.CtBean"> </bean> <bean id="ab" class="paraBean.AnoBean"> </bean> <bean id="jd" class="paraBean.JayDiskImpl"> <constructor-arg ref="cb"/> <constructor-arg ref="ab"/> <constructor-arg value="注入的字符串"/> <constructor-arg> <list> <value>我是注入集合1</value> <value>我是注入集合2</value> </list> </constructor-arg> <constructor-arg> <list> <ref bean="ab"/> <ref bean="cb"/> </list> </constructor-arg> <property name="cbn" ref="cb"/> <property name="setStr" value="i am 属性字符串"/> <property name="setStrlist"> <list> <value>属性字符串1</value> <value>属性字符串2</value> </list> </property> <property name="setObjlist"> <list> <ref bean="ab"/> <ref bean="cb"/> </list> </property> </bean> </beans>
运行test 控制台输出:
i am ctbean
i am abbean
I am anotation 注入的字符串
我是注入集合1
我是注入集合2
paraBean.AnoBean@40c06c8b
paraBean.CtBean@19163ae3
-----------------------------
-----------------------------
i am ctbean
i am 属性字符串
属性字符串1
属性字符串2
paraBean.AnoBean@40c06c8b
paraBean.CtBean@19163ae3
现在xml中的配置用c 和p标签分别来代替 construct 和property 属性标签:
此时xml头部为
<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" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">[/code]
c和p标签无法像construct和property 那样直接嵌入集合,那么就使用一种折中的方法,将list 转成bean对象,然后在c和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" xmlns:c="http://www.springframework.org/schema/c" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="cb" class="paraBean.CtBean">
</bean>
<bean id="ab" class="paraBean.AnoBean">
</bean>
<util:list id="strlist">
<value>注入集合1</value>
<value>注入集合2</value>
</util:list>
<util:list id="blist">
<ref bean="ab"/>
<ref bean="cb"/>
</util:list>
<bean id="jd" class="paraBean.JayDiskImpl" c:cb-ref="cb"
c:ab-ref="ab" c:str="c string" c:strlist-ref="strlist"
c:blist-ref="blist" p:cbn-ref="cb" p:setStr="i am p string"
p:setStrlist-ref="strlist" p:setObjlist-ref="blist">
<!--<constructor-arg ref="cb"/>
<constructor-arg ref="ab"/>
<constructor-arg value="注入的字符串"/>
<constructor-arg>
<list>
<value>我是注入集合1</value>
<value>我是注入集合2</value>
</list>
</constructor-arg>
<constructor-arg>
<list>
<ref bean="ab"/>
<ref bean="cb"/>
</list>
</constructor-arg>
<property name="cbn" ref="cb"/>
<property name="setStr" value="i am 属性字符串"/>
<property name="setStrlist">
<list>
<value>属性字符串1</value>
<value>属性字符串2</value>
</list>
</property>
<property name="setObjlist">
<list>
<ref bean="ab"/>
<ref bean="cb"/>
</list>
</property> -->
</bean>
</beans>
最后输出:
i am ctbean
i am abbean
I am anotation c string
注入集合1
注入集合2
paraBean.AnoBean@75227d3
paraBean.CtBean@22b49166
-----------------------------
-----------------------------
i am ctbean
i am p string
注入集合1
注入集合2
paraBean.AnoBean@75227d3
paraBean.CtBean@22b49166
相关文章推荐
- (二)spring的注入---配置构造器属性注入
- Spring Xml 文件的配置 参数 属性 说明
- Spring代码实例系列-09:通过Spring PropertyPlaceholderConfigurer将properties配置的属性注入到xml配置文件中
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- TabActivity可以显示实现多页显示效果,在xml布局文件中需要有一些特殊的配置属性
- Spring 配置bean, 注解方式配置 xml方式要生产set方法方便属性注入,注解方式不需要,利用反射机制注入
- 如何在Hibernate log中显示所执行的sql的参数值 (以logback.xml的配置为例子)
- Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)
- Spring根据XML配置文件 p名称空间注入属性的实例
- struts.xml属性配置,action属性,通配符,action接受参数(二)
- Spring属性注入的XML配置
- Spring根据XML配置文件注入对象类型属性
- Spring根据XML配置文件 p名称空间注入属性
- spring xml 配置 属性注入 构造方法注入
- JSF web.xml的各类参数属性配置
- Spring基于xml配置文件对list、set、map集合的属性注入
- Spring根据XML配置文件注入属性的方法
- spring 注入java.util.Properties 属性两种xml中的配置练习
- Spring根据XML配置文件注入属性 其实也是造bean,看看是使用constructor还是setter顺带完成属性赋值
- Spring框架 注解annotation和配置文件混合使用(生成对象与属性注入) xml配置文件没有提示解决