首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

解决构选不确定有关问题,使用spring3注解

2013-11-21 
解决构选不确定问题,使用spring3注解更多文章package com.mcnz.springpublic class GameSummary {?? priv

解决构选不确定问题,使用spring3注解

更多文章

package com.mcnz.spring;

public class GameSummary {

?

? private String clientChoice, serverChoice, result;

?private java.util.Date date = null;

?

? String[] choices = {"rock", "paper", "scissors"};

?String[] results = {"win", "lose", "tie"};

?

? public GameSummary(){}

?

? public String getClientChoice() { return clientChoice; }

?public void setClientChoice(String clientChoice) {

?? this.clientChoice = clientChoice;?

?}

?public String getServerChoice() { return serverChoice; }?

?public void setServerChoice(String serverChoice) {

?? this.serverChoice = serverChoice;

?

? }

?public String getResult() { return result; }

?

? public void setResult(String result) {

?? this.result = result;

?}?

?public java.util.Date getDate() { return date; }

?public void setDate(java.util.Date date) {

?? this.date = date;

?}

?public String toString() {

?? return clientChoice +????????????????????????????????????

???? ":" + serverChoice +

?????? ":" + result + ":" + date;

?}

}

package com.mcnz.spring;

import org.springframework.context.annotation.*;

@Configuration

public class SummaryConfig {?

?@Bean

?public GameSummary clientWinsWithPaper() {

?? GameSummary gs = new GameSummary();

?

??? gs.setClientChoice("paper");

??? gs.setServerChoice("rock");

??? gs.setResult("win");

?

??? return gs;

?}

}

<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
?<bean id="clientWinsWithPaper" >

???<property name="clientChoice" value="paper"/>
???<property name="serverChoice" value="rock"/>
???<property name="result" value="win"/>

???</bean>
</beans>

如果您的环境设置正确,你可以运行这两个例子,即弹簧使用XML,春天,在相同的XML没有独立的应用程序。它看起来像这样:

?

package com.mcnz.spring;

?

?import org.springframework.beans.factory.BeanFactory;

?

?import org.springframework.beans.factory.xml.XmlBeanFactory;

?

?import org.springframework.context.annotation.AnnotationConfigApplicationContext;

?

?import org.springframework.core.io.*;

?

?public class SumRunner {

?

?public static void main(String args[]){

?

?/* Spring IoC Without XML */

?

?AnnotationConfigApplicationContext context

?

?= new AnnotationConfigApplicationContext(SummaryConfig.class);

?

?GameSummary gsA

?

?= context.getBean("clientWinsWithPaper", GameSummary.class);

?

?/* Spring IoC with XML */

?

?Resource resource = new ClassPathResource("summary.xml");

?

?BeanFactory beanFactory = new XmlBeanFactory(resource);

?

?GameSummary gsX

?

?= (GameSummary)beanFactory.getBean("clientWinsWithPaper");

?

?System.out.println(gsA);

?

?System.out.println(gsX);

?

?}

?

?}

?

?public GameSummary(String c, String s){

?

?clientChoice = c;

?

?serverChoice = s;

?

?/* result = ???; */

?

?}

?

使等效构造函数调用使用XML,您需要使用元素,并通过在constructor - arg你初始化数据通过value属性。你实际上并不需要指定参数类型,春天会去找到一个最佳匹配的构造函数,参数提供。这是它的样子:

<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="clientWinsWithPaper" >
<constructor-arg value="rock"/>
<constructor-arg value="paper"/>
</bean>
</beans>

虽然配置细节在Spring容器已经改变,客户端代码引用不会,所以你可以继续并重新运行SumRunner类。这一次,输出将反映事实和serverGesture clientGesture都被初始化为非空值。?

paper:rock:null:null


String[] results = { "win", "lose", "tie" };

public GameSummary(int c, int r) {
?clientChoice = choices[c];
?result = results[c];
}


与构造函数代码,我将添加一个新的方法@ configuration类,给出一种GameSummary实例,表明客户端获得对选择“摇滚。“真的,代码为这个新clientWinsWithRock方法不能更简单


@Bean
public GameSummary clientWinsWithRock() {
GameSummary gs = new GameSummary(0, 1);
return gs ;
}


然而,事情变得更复杂的XML文件。如果有人仅仅添加以下进入他们的Spring配置文件,您最终将得到一些非常有bug的代码:


<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="clientWinsWithPaper" >
<constructor-arg value="rock"/>
<constructor-arg value="paper"/>
</bean>
<bean id="clientWinsWithRock" >
<constructor-arg value="0"/>
<constructor-arg value="1"/>
</bean>
</beans>


如果你调整你的SumRunner把clientWithRock实例的两个注释和XML配置Spring容器,然后跑你的代码,你可能会得到以下错误的结果:


rock:null:win:null
0:1:null:null


现在,有一个简单的解决这个问题。所有您需要做的就是进入你的XML文件并添加类型属性的constructor - arg元素。当然,这是简单的如果你完全理解问题,是一个专家在春天,总是知道去哪里在XML配置文件,它推动超过一千豆条目。注意,这不是一个错误,要么在编译时间或在运行时。这只是一个普通的旧bug,它不是一个缺陷在春天。这是一个错误


<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="clientWinsWithPaper" >
<constructor-arg?type="java.lang.String"?value="rock"/>
<constructor-arg?type="java.lang.String"?value="paper"/>
</bean>
<bean id="clientWinsWithRock" >
<constructor-arg?type="int"?value="0" />
<constructor-arg?type="int"?value="1"/>
</bean>
</beans>


rock:null:win:null
rock:null:win:null


现在,有一件事来强调这是是多么简单写一些Java代码调用适当的构造函数,而不是bug拉登路径使用XML。当然,我们的错误是由于缺乏了解的问题域,都是如何工作的,所以我们真的春天都怨不得别人,只能怪自己。当然,我们解决了这个问题,但仍然,想象这是一个大项目。要多长时间重新编译您的工作区,重新运行您的测试套件,文档bug,然后res吗


?

?

?

?

热点排行