??xml version="1.0" encoding="utf-8" standalone="yes"?>精品福利av,国产乱子伦精品,粉嫩一区二区三区http://www.aygfsteel.com/jnbzwm/category/46252.html敏捷是一条很长的路,摸烦(ch)着前进着zh-cnTue, 05 Apr 2011 11:53:18 GMTTue, 05 Apr 2011 11:53:18 GMT60Hessian构徏分布式系l应用[l]http://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335376.html??/dc:creator>??/author>Sun, 17 Oct 2010 14:10:00 GMThttp://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335376.htmlhttp://www.aygfsteel.com/jnbzwm/comments/335376.htmlhttp://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335376.html#Feedback0http://www.aygfsteel.com/jnbzwm/comments/commentRss/335376.htmlhttp://www.aygfsteel.com/jnbzwm/services/trackbacks/335376.html本文为原创,Ƣ迎转蝲Q{载请注明出处BlogJava?br />
在上一?Hessian构徏分布式系l应?/a> 的基上,我们对程序进行改q?br /> 现在有以下比较突出的问题Q?br /> a.如果hessian服务端我要做的业务很多,怎么办?
我要定义很多个接口,然后再写实现c,最?ch)的是还要配|它?br /> 我的设想是,hessian服务只提供一个归口,再此对外的接口实C反射调用具体的业务类?/p>

b.客户端在调用Ӟ每次调用q程接口都要用以下代码吗Q?/p>

String url = "http://localhost:8080/HessianService/remote/service";
HessianProxyFactory factory 
= new HessianProxyFactory();
ServiceRemote rmt 
= (ServiceRemote) factory.create(ServiceRemote.class, url);


昄是不需要的?br /> 我们可以通过加入~存的方式对其进行改良,我们也可以通过Spring在客L(fng)理它?/p>

一、完善hessian服务端实玎ͼ(x)
1.首先修改ServiceRemote接口Q?/p>

package com.al;

import java.util.Map;

@SuppressWarnings(
"unchecked")
public interface ServiceRemote  {
    
public Map callService(String target, Map inputMap) throws Exception;
}

callService为统一入口Q在此做如下U定Q?br /> 1)target字符串ؓ(f)要调用的service的完整类路径+要调用的Ҏ(gu)?br /> 2)service的方法均用以下方法签名:(x)
public Map ***(Map inputMap);
入参为MapQ返回g为MapQ基本可以满x(chng)有情况了(jin)。(臛_入参为MapQ很适合调用iBatis来对DBq行操作。)(j)

2.修改接口实现cServiceQ此cM做具体业务,而是反射调用具体业务c:(x)

package com.al;

import java.lang.reflect.Method;
import java.util.Map;

import org.apache.commons.beanutils.MethodUtils;
import org.apache.commons.lang.StringUtils;

@SuppressWarnings(
"unchecked")
public class Service implements ServiceRemote {

    
public Map callService(String target, Map inputMap) throws Exception {
        String className 
= StringUtils.substringBeforeLast(target, ".");
        String methodName 
= StringUtils.substringAfterLast(target, ".");
        Class serviceClass 
= loadClass(className);
        Method method 
= getMethod(serviceClass, methodName, Map.class);
        
// 提供讉K效率
        method.setAccessible(true);
 
// 调用具体业务c?/span>
        return (Map) method.invoke(serviceClass.newInstance(), inputMap);
    }

    
    
private static <T> Class<T> loadClass(String className) throws ClassNotFoundException {
            
return (Class<T>) getClassLoader().loadClass(className);
    }

    
    
private static ClassLoader getClassLoader() {
        
return Thread.currentThread().getContextClassLoader();
    }

    
    
private static Method getMethod(Class<?> cls, String name, Class<?> parameterTypes) {
        
return MethodUtils.getAccessibleMethod(cls, name, parameterTypes);
    }

}

 

3.举个例子Q服务端提供业务cDisplayUserService.java

package com.al.service;

import java.util.HashMap;
import java.util.Map;

@SuppressWarnings(
"unchecked")
public class DisplayUserService {
    
public static final String selectUsers = "com.al.service.DisplayUserService.selectUsers";
    
public static final String deleteUser = "com.al.service.DisplayUserService.deleteUser";
    
    
public Map selectUsers(Map inputMap) {
        Map ret 
= new HashMap();
        
// 数据库操作取得用户列?nbsp;省略
        ret.put("User""User");
        
return ret;
    }

    
    
public Map deleteUser(Map inputMap) {
        
// 数据库操作取得用户列?nbsp;省略
        return null;
    }

}


所有其他配|不变,请参考上一?
Hessian构徏分布式系l应?/a> ?/p>


二、客L(fng)代码的修改:(x)
1.加入springq行理Q?br /> application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
<bean id="serviceRemote" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        
<property name="serviceUrl" value="http://localhost:8080/HessianService/remote/service" />
        
<property name="serviceInterface" value="com.al.ServiceRemote" />
    
</bean>
</beans>

 

2.客户端如下调用即可:(x)

package com.ai.client;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.al.ServiceRemote;
import com.al.service.DisplayUserService;

public class ClientTest {
    
public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext cxt 
= new ClassPathXmlApplicationContext("application.xml");
        ServiceRemote rmt 
= (ServiceRemote)cxt.getBean("serviceRemote");
        System.out.println(rmt.callService(DisplayUserService.selectUsers, 
null));
    }

}


另外一U方法是自己实现~存?br /> 也就是第一ơ调用远E代码时生成ServiceRemote对象Q将其保存在?rn)态的容器(HashMap)中,
每次准备调用此远E代码时Q先判断容器中是否有ServiceRemote对象Q有则直接将其取出ƈ使用卛_Q要注意的就是在q个容器上的同步问题?br /> 具体实现׃做了(jin)Q很单?/p>

在项目中Q对于客L(fng)代码来讲Q还是有许多工作要做的:(x)
1) 如果我们要调用多个远E服务怎么办?
我们要提供一个统一调用Q将q程调用的动作封装v来,让用的Z知道自己调用?jin)不同的q程服务?br /> 只要调用某个Ҏ(gu)、传入参数即可?/p>

2) 如何方便开发员调试q程的服务代码?
在做分布式系l开发的时候,如果每修改一下应用层的serviceQ就要对其进行发布,然后再去调用看是否已OKQ那效率?x)很低?/p>

3) 如何理多方调用的远E服务?

4) 如何提高q程调用的效率?
是否可以通过?对象q行~存、方法是否也可以~存Q甚x(chng)对调用结果进行缓存?

5) {等..
q些在具体的目中都是不得不考虑的问题。以后再慢慢讨论吧?/p>

]]>
Hessian构徏分布式系l应?/title><link>http://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335371.html</link><dc:creator>??/dc:creator><author>??/author><pubDate>Sun, 17 Oct 2010 13:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335371.html</guid><wfw:comment>http://www.aygfsteel.com/jnbzwm/comments/335371.html</wfw:comment><comments>http://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jnbzwm/comments/commentRss/335371.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jnbzwm/services/trackbacks/335371.html</trackback:ping><description><![CDATA[本文为原创,Ƣ迎转蝲Q{载请注明出处<a title="BlogJava" href="http://www.aygfsteel.com/jnbzwm/">BlogJava</a>?br /> <br /> <p>Hessian是一个轻量的remoting onhttp工具Q用简单的Ҏ(gu)提供?jin)RMI的功? 相比WebServiceQHessian更简单、快捗?br /> 采用的是二进制RPC协议Q因为采用的是二q制协议Q所以它很适合于发送二q制数据?/p> <p>本文分Z下几个内容:(x)<br /> 一、一个简单的Hessian调用例子<br /> 二、Spring+Hessian的例?br /> 三、我们的调用变得通用</p> <p>W一部分Q一个简单的Hessian调用例子<br /> 建立web工程HessianService?br /> q里Z(jin)单v见,我将q程接口cR接口实现类都定义在此web工程下?/p> <p>个h觉得一个比较好的做法是web工程分开Q此web工程只定义对外的接口q提供服务,而实现类新徏一个Java工程存放?br /> q样web工程依赖此Java工程Q且客户端也依赖此Java工程?/p> <p>1) q程接口c?ServiceRemote.java</p> <p> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.al;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Map;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br /> <img id="Codehighlighter1_103_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_148_Open_Text.style.display='none'; Codehighlighter1_103_148_Closed_Image.style.display='inline'; Codehighlighter1_103_148_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_103_148_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_103_148_Closed_Text.style.display='none'; Codehighlighter1_103_148_Open_Image.style.display='inline'; Codehighlighter1_103_148_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">interface</span><span style="color: #000000"> ServiceRemote  </span><span id="Codehighlighter1_103_148_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_103_148_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Map callService(Map inputMap) ;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <p><br /> 2) 实现c?Service.java</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.al;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.HashMap;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Map;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br /> <img id="Codehighlighter1_143_379_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_379_Open_Text.style.display='none'; Codehighlighter1_143_379_Closed_Image.style.display='inline'; Codehighlighter1_143_379_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_143_379_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_143_379_Closed_Text.style.display='none'; Codehighlighter1_143_379_Open_Image.style.display='inline'; Codehighlighter1_143_379_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Service </span><span style="color: #0000ff">implements</span><span style="color: #000000"> ServiceRemote </span><span id="Codehighlighter1_143_379_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_143_379_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_187_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_187_377_Open_Text.style.display='none'; Codehighlighter1_187_377_Closed_Image.style.display='inline'; Codehighlighter1_187_377_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_187_377_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_187_377_Closed_Text.style.display='none'; Codehighlighter1_187_377_Open_Image.style.display='inline'; Codehighlighter1_187_377_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Map callService(Map inputMap) </span><span id="Codehighlighter1_187_377_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_187_377_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_218_266_Open_Image" onclick="this.style.display='none'; Codehighlighter1_218_266_Open_Text.style.display='none'; Codehighlighter1_218_266_Closed_Image.style.display='inline'; Codehighlighter1_218_266_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_218_266_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_218_266_Closed_Text.style.display='none'; Codehighlighter1_218_266_Open_Image.style.display='inline'; Codehighlighter1_218_266_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000">(inputMap </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">) </span><span id="Codehighlighter1_218_266_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_218_266_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            inputMap </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> do something<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> <img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        inputMap.put(</span><span style="color: #000000">"</span><span style="color: #000000">NAME</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">Hessian</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> inputMap;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <p><br /> 3) web.xml配置</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff">?></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"><</span><span style="color: #800000">web-app </span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.5"</span><span style="color: #ff0000"> xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee"</span><span style="color: #ff0000"> xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000">hessianService</span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">></span><span style="color: #000000">com.caucho.hessian.server.HessianServlet</span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">init-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000">service-class</span><span style="color: #0000ff"></</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000">com.al.Service</span><span style="color: #0000ff"></</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">init-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">servlet</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000">hessianService</span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span><span style="color: #000000">/hessianService</span><span style="color: #0000ff"></</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"></</span><span style="color: #800000">web-app</span><span style="color: #0000ff">></span></div> <p><br /> l过以上3步,hessian服务部v是完成?jin),在tomcat下发布?/p> <p>4) 调用方代?/p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.ai.client;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.al.ServiceRemote;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.caucho.hessian.client.HessianProxyFactory;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_132_480_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_480_Open_Text.style.display='none'; Codehighlighter1_132_480_Closed_Image.style.display='inline'; Codehighlighter1_132_480_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_132_480_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_132_480_Closed_Text.style.display='none'; Codehighlighter1_132_480_Open_Image.style.display='inline'; Codehighlighter1_132_480_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> ClientTest </span><span id="Codehighlighter1_132_480_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_132_480_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_194_478_Open_Image" onclick="this.style.display='none'; Codehighlighter1_194_478_Open_Text.style.display='none'; Codehighlighter1_194_478_Closed_Image.style.display='inline'; Codehighlighter1_194_478_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_194_478_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_194_478_Closed_Text.style.display='none'; Codehighlighter1_194_478_Open_Image.style.display='inline'; Codehighlighter1_194_478_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_194_478_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_194_478_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String url </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/HessianService/hessianService</span><span style="color: #000000">"</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        HessianProxyFactory factory </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HessianProxyFactory();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        ServiceRemote rmt </span><span style="color: #000000">=</span><span style="color: #000000"> (ServiceRemote) factory.create(ServiceRemote.</span><span style="color: #0000ff">class</span><span style="color: #000000">, url);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(rmt.callService(</span><span style="color: #0000ff">null</span><span style="color: #000000">));<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <p><br /> 执行代码Q结果如下:(x)<br /> {NAME=Hessian}<br /> 说明调用q程代码成功?jin)?/p> <p>二、Spring+Hessian的例?br /> 1) web工程HessianService 的ServiceRemote 和ServicecM变。对web.xmlq行修改Q?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff">?></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"><</span><span style="color: #800000">web-app </span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.5"</span><span style="color: #ff0000"> xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee"</span><span style="color: #ff0000"> xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">context-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000">contextConfigLocation</span><span style="color: #0000ff"></</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000">/WEB-INF/dispatcher-servlet.xml</span><span style="color: #0000ff"></</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">context-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000">dispatcher</span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">></span><span style="color: #000000">org.springframework.web.servlet.DispatcherServlet</span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">></span><span style="color: #000000">1</span><span style="color: #0000ff"></</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">servlet</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000">dispatcher</span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span><span style="color: #000000">/remote/*</span><span style="color: #0000ff"></</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">></span><span style="color: #000000">index.jsp</span><span style="color: #0000ff"></</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"></</span><span style="color: #800000">web-app</span><span style="color: #0000ff">></span></div> <p><br /> q里要注意的?<br /> a)dispatcher-servlet.xmlq个文g的命名。servlet配置为dispatcherQ则此文件定义规则ؓ(f)****-servlet.xml.<br /> <br /> b)另外是Spring和hessian的版本问题?br /> spring版本?.5.6Q需要在此web工程下引入:(x)spring-2.5.6.jar、spring-webmvc-2.5.6.jar、commons-logging-1.1.1.jar?br /> hessian的版本是hessian-3.1.6.jarQhessian的低版本?hessian-3.0.13和此Spring版本不合。(我试验了(jin)是配|不成功的。)(j)</p> <p>2) dispatcher-servlet.xml<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff">?></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"><!</span><span style="color: #ff00ff">DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"><</span><span style="color: #800000">beans</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">description</span><span style="color: #0000ff">></span><span style="color: #000000">hessian server properties</span><span style="color: #0000ff"></</span><span style="color: #800000">description</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">bean </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="serviceImpl"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="com.al.Service"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">bean </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="/service"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="org.springframework.remoting.caucho.HessianServiceExporter"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="service"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">ref </span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="serviceImpl"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">property</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="serviceInterface"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">value</span><span style="color: #0000ff">></span><span style="color: #000000">com.al.ServiceRemote</span><span style="color: #0000ff"></</span><span style="color: #800000">value</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">property</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">bean</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"></</span><span style="color: #800000">beans</span><span style="color: #0000ff">></span></div> <p><br /> 3) 客户端代码可以保持原样不变,把调用hessian服务的url变换一下即可:(x)<br /> http://localhost:8080/HessianService/remote/service<br /> http://IP:port/发布工程?web.xml中配|的url-pattern/****-servlet.xml bean的ID?/p> <p>三、我们的调用变得通用 在下一中介绍?/p> <img src ="http://www.aygfsteel.com/jnbzwm/aggbug/335371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jnbzwm/" target="_blank">??/a> 2010-10-17 21:11 <a href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/17/335371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过Spring实现对自定义注解属性进行资源注?/title><link>http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333721.html</link><dc:creator>??/dc:creator><author>??/author><pubDate>Mon, 04 Oct 2010 02:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333721.html</guid><wfw:comment>http://www.aygfsteel.com/jnbzwm/comments/333721.html</wfw:comment><comments>http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jnbzwm/comments/commentRss/333721.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jnbzwm/services/trackbacks/333721.html</trackback:ping><description><![CDATA[通过上一?<a id="viewpost1_TitleUrl" href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333720.html">利用自定义Java注解实现资源注入</a> 介绍的方法,我们实现?jin)通过自定义注解完成了(jin)对DataSource资源的注入,但在实际应用中,我们通常不希望去昑ּ的去声明q样的MyAnnotationBeanProcessor对象来帮助我们完成注入,而是希望通过Spring帮我?#8220;(zhn)?zhn)?#8221;完成?br /> l?<a id="viewpost1_TitleUrl" href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333720.html">利用自定义Java注解实现资源注入</a> 里的代码(部分代码)不变Q我们希望在试cM以如下方法调用便可以实现资源的注入:(x)<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.annotation.MyService;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_140_541_Open_Image" onclick="this.style.display='none'; Codehighlighter1_140_541_Open_Text.style.display='none'; Codehighlighter1_140_541_Closed_Image.style.display='inline'; Codehighlighter1_140_541_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_140_541_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_140_541_Closed_Text.style.display='none'; Codehighlighter1_140_541_Open_Image.style.display='inline'; Codehighlighter1_140_541_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> SpringWiringTest </span><span id="Codehighlighter1_140_541_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_140_541_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_185_539_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_539_Open_Text.style.display='none'; Codehighlighter1_185_539_Closed_Image.style.display='inline'; Codehighlighter1_185_539_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_185_539_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_185_539_Closed_Text.style.display='none'; Codehighlighter1_185_539_Open_Image.style.display='inline'; Codehighlighter1_185_539_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String args[]) </span><span id="Codehighlighter1_185_539_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_185_539_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        ClassPathXmlApplicationContext ctx </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">com/spring/applicationContext.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        MyService b </span><span style="color: #000000">=</span><span style="color: #000000"> (MyService)ctx.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">myService</span><span style="color: #000000">"</span><span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 通过Springȝ理beanQ此时已完成?jin)对标有DataSource注解的资源的注入</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        System.out.println(b.selectForObjectFromB(</span><span style="color: #000000">""</span><span style="color: #000000">, </span><span style="color: #0000ff">null</span><span style="color: #000000">));<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(b.selectForObjectFromA(</span><span style="color: #000000">""</span><span style="color: #000000">, </span><span style="color: #0000ff">null</span><span style="color: #000000">));<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> 注:(x)MyServicecd现在 <a id="viewpost1_TitleUrl" href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333720.html">利用自定义Java注解实现资源注入</a> 中?br /> <br /> Z(jin)实现上面的目标,我们׃能用MyAnnotationBeanProcessor.javacL实现对资源的注入?jin),我们必须实现一个能融入Spring的BeanProcessorcL行?br /> DataSourceBeanProcessor.javacd现BeanPostProcessor、PriorityOrdered接口Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.reflect.Field;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.BeansException;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.beans.factory.config.BeanPostProcessor;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.core.Ordered;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.core.PriorityOrdered;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_323_980_Open_Image" onclick="this.style.display='none'; Codehighlighter1_323_980_Open_Text.style.display='none'; Codehighlighter1_323_980_Closed_Image.style.display='inline'; Codehighlighter1_323_980_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_323_980_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_323_980_Closed_Text.style.display='none'; Codehighlighter1_323_980_Open_Image.style.display='inline'; Codehighlighter1_323_980_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> DataSourceBeanProcessor </span><span style="color: #0000ff">implements</span><span style="color: #000000"> BeanPostProcessor, PriorityOrdered </span><span id="Codehighlighter1_323_980_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_323_980_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    @Override<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #008000">//</span><span style="color: #008000"> 在这里完成资源注?/span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Object postProcessAfterInitialization(Object bean, String beanName)<br /> <img id="Codehighlighter1_465_733_Open_Image" onclick="this.style.display='none'; Codehighlighter1_465_733_Open_Text.style.display='none'; Codehighlighter1_465_733_Closed_Image.style.display='inline'; Codehighlighter1_465_733_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_465_733_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_465_733_Closed_Text.style.display='none'; Codehighlighter1_465_733_Open_Image.style.display='inline'; Codehighlighter1_465_733_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">throws</span><span style="color: #000000"> BeansException </span><span id="Codehighlighter1_465_733_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_465_733_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Class</span><span style="color: #000000"><?></span><span style="color: #000000"> cls </span><span style="color: #000000">=</span><span style="color: #000000"> bean.getClass();<br /> <img id="Codehighlighter1_559_706_Open_Image" onclick="this.style.display='none'; Codehighlighter1_559_706_Open_Text.style.display='none'; Codehighlighter1_559_706_Closed_Image.style.display='inline'; Codehighlighter1_559_706_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_559_706_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_559_706_Closed_Text.style.display='none'; Codehighlighter1_559_706_Open_Image.style.display='inline'; Codehighlighter1_559_706_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (Field field : cls.getDeclaredFields()) </span><span id="Codehighlighter1_559_706_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_559_706_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_622_696_Open_Image" onclick="this.style.display='none'; Codehighlighter1_622_696_Open_Text.style.display='none'; Codehighlighter1_622_696_Closed_Image.style.display='inline'; Codehighlighter1_622_696_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_622_696_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_622_696_Closed_Text.style.display='none'; Codehighlighter1_622_696_Open_Image.style.display='inline'; Codehighlighter1_622_696_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (field.isAnnotationPresent(DataSource.</span><span style="color: #0000ff">class</span><span style="color: #000000">)) </span><span id="Codehighlighter1_622_696_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_622_696_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />                DataSourceStaticWiring.wiring(bean, field);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> bean;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    @Override<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Object postProcessBeforeInitialization(Object bean, String beanName)<br /> <img id="Codehighlighter1_860_887_Open_Image" onclick="this.style.display='none'; Codehighlighter1_860_887_Open_Text.style.display='none'; Codehighlighter1_860_887_Closed_Image.style.display='inline'; Codehighlighter1_860_887_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_860_887_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_860_887_Closed_Text.style.display='none'; Codehighlighter1_860_887_Open_Image.style.display='inline'; Codehighlighter1_860_887_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">throws</span><span style="color: #000000"> BeansException </span><span id="Codehighlighter1_860_887_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_860_887_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> bean;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    @Override<br /> <img id="Codehighlighter1_930_978_Open_Image" onclick="this.style.display='none'; Codehighlighter1_930_978_Open_Text.style.display='none'; Codehighlighter1_930_978_Closed_Image.style.display='inline'; Codehighlighter1_930_978_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_930_978_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_930_978_Closed_Text.style.display='none'; Codehighlighter1_930_978_Open_Image.style.display='inline'; Codehighlighter1_930_978_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getOrder() </span><span id="Codehighlighter1_930_978_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_930_978_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> Ordered.LOWEST_PRECEDENCE;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> 下面来看DataSourceStaticWiring的实玎ͼ与前一?里的DataSourceWiring.javacȝ比,改动Ҏ(gu)以下三个Q?br /> 1.不需要实现IFieldWiring接口<br /> 2.删除annotationClassҎ(gu)<br /> 3.wiringҎ(gu)修改为staticҎ(gu)<br /> 具体代码如下Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000"> java.lang.reflect.Field;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_69_642_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_642_Open_Text.style.display='none'; Codehighlighter1_69_642_Closed_Image.style.display='inline'; Codehighlighter1_69_642_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_642_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_642_Closed_Text.style.display='none'; Codehighlighter1_69_642_Open_Image.style.display='inline'; Codehighlighter1_69_642_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> DataSourceStaticWiring </span><span id="Codehighlighter1_69_642_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_69_642_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_130_640_Open_Image" onclick="this.style.display='none'; Codehighlighter1_130_640_Open_Text.style.display='none'; Codehighlighter1_130_640_Closed_Image.style.display='inline'; Codehighlighter1_130_640_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_130_640_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_130_640_Closed_Text.style.display='none'; Codehighlighter1_130_640_Open_Image.style.display='inline'; Codehighlighter1_130_640_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> wiring(Object object, Field field) </span><span id="Codehighlighter1_130_640_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_130_640_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Object fieldObj </span><span style="color: #000000">=</span><span style="color: #000000"> ReflectUtils.getFieldValue(object, field.getName());<br /> <img id="Codehighlighter1_241_271_Open_Image" onclick="this.style.display='none'; Codehighlighter1_241_271_Open_Text.style.display='none'; Codehighlighter1_241_271_Closed_Image.style.display='inline'; Codehighlighter1_241_271_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_241_271_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_241_271_Closed_Text.style.display='none'; Codehighlighter1_241_271_Open_Image.style.display='inline'; Codehighlighter1_241_271_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (fieldObj </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">) </span><span id="Codehighlighter1_241_271_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_241_271_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        DataSource annotation </span><span style="color: #000000">=</span><span style="color: #000000"> field.getAnnotation(DataSource.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String type </span><span style="color: #000000">=</span><span style="color: #000000"> annotation.type();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String sqlMap </span><span style="color: #000000">=</span><span style="color: #000000"> annotation.sqlMap();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #008000">//</span><span style="color: #008000"> q里可以用缓存来实现Q不用每ơ都d建新的SqlMapClient对象</span><span style="color: #008000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">        SqlMapClient sqlMapImpl </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SqlMapClient(sqlMap, type);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        ReflectUtils.setFieldValue(object, field.getName(), SqlMapClient.</span><span style="color: #0000ff">class</span><span style="color: #000000">, sqlMapImpl);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> 注:(x)SqlMapClient、ReflectUtils实现在上一?<a id="viewpost1_TitleUrl" href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333720.html">利用自定义Java注解实现资源注入</a> 中?br /> <br /> 代码已准备就l,接下来是配置SpringQapplicationContext.xml<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff"><?</span><span style="color: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff">?></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"><</span><span style="color: #800000">beans </span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"> xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    xmlns:aop</span><span style="color: #0000ff">="http://www.springframework.org/schema/aop"</span><span style="color: #ff0000"> xmlns:tx</span><span style="color: #0000ff">="http://www.springframework.org/schema/tx"</span><span style="color: #ff0000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span><span style="color: #ff0000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />                        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />                        http://www.springframework.org/schema/aop <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />                        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />                        http://www.springframework.org/schema/tx <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />                        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />                        http://www.springframework.org/schema/context<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />           http://www.springframework.org/schema/context/spring-context-2.5.xsd"</span><span style="color: #ff0000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    default-lazy-init</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #008000"><!--</span><span style="color: #008000"> 自定义的BeanProcessor </span><span style="color: #008000">--></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">bean </span><span style="color: #ff0000">class</span><span style="color: #0000ff">="com.annotation.DataSourceBeanProcessor"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">context:component-scan </span><span style="color: #ff0000">base-package</span><span style="color: #0000ff">="com.annotation"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #008000"><!--</span><span style="color: #008000"> 试用bean </span><span style="color: #008000">--></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"><</span><span style="color: #800000">bean </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="myService"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="com.annotation.MyService"</span><span style="color: #ff0000"> destroy-method</span><span style="color: #0000ff">="close"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="color: #0000ff"></</span><span style="color: #800000">bean</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff"></</span><span style="color: #800000">beans</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span></div> <br /> 试代码其实已经在前面列出来?jin)。SpringWiringTest.java<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.annotation.MyService;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_140_494_Open_Image" onclick="this.style.display='none'; Codehighlighter1_140_494_Open_Text.style.display='none'; Codehighlighter1_140_494_Closed_Image.style.display='inline'; Codehighlighter1_140_494_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_140_494_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_140_494_Closed_Text.style.display='none'; Codehighlighter1_140_494_Open_Image.style.display='inline'; Codehighlighter1_140_494_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> SpringWiringTest </span><span id="Codehighlighter1_140_494_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_140_494_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_185_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_492_Open_Text.style.display='none'; Codehighlighter1_185_492_Closed_Image.style.display='inline'; Codehighlighter1_185_492_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_185_492_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_185_492_Closed_Text.style.display='none'; Codehighlighter1_185_492_Open_Image.style.display='inline'; Codehighlighter1_185_492_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String args[]) </span><span id="Codehighlighter1_185_492_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_185_492_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        ClassPathXmlApplicationContext ctx </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">com/spring/applicationContext.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        MyService b </span><span style="color: #000000">=</span><span style="color: #000000"> (MyService)ctx.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">myService</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(b.selectForObjectFromB(</span><span style="color: #000000">""</span><span style="color: #000000">, </span><span style="color: #0000ff">null</span><span style="color: #000000">));<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(b.selectForObjectFromA(</span><span style="color: #000000">""</span><span style="color: #000000">, </span><span style="color: #0000ff">null</span><span style="color: #000000">));<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> 执行l果Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SqlMapClient[sqlMap</span><span style="color: #000000">=</span><span style="color: #000000">com</span><span style="color: #000000">/</span><span style="color: #000000">annotation</span><span style="color: #000000">/</span><span style="color: #000000">sql</span><span style="color: #000000">-</span><span style="color: #000000">map</span><span style="color: #000000">-</span><span style="color: #000000">config</span><span style="color: #000000">-</span><span style="color: #000000">B.xml,type</span><span style="color: #000000">=</span><span style="color: #000000">B]<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />SqlMapClient[sqlMap</span><span style="color: #000000">=</span><span style="color: #000000">com</span><span style="color: #000000">/</span><span style="color: #000000">annotation</span><span style="color: #000000">/</span><span style="color: #000000">sql</span><span style="color: #000000">-</span><span style="color: #000000">map</span><span style="color: #000000">-</span><span style="color: #000000">config</span><span style="color: #000000">-</span><span style="color: #000000">A.xml,type</span><span style="color: #000000">=</span><span style="color: #000000">A]</span></div> <br /> q果可见,我们利用Spring完成?jin)对DataSource资源的注入了(jin)?br /> <br /> 在这里如果还x(chng)展的话,需要新建类假设为InParamBeanProcessorQ实现BeanPostProcessor、PriorityOrdered接口Q然后实现其中的Ҏ(gu)Q对资源q行注入Q这里就是扩展Spring?jin),与本介l的Ҏ(gu)相同?br /> <br /> <span style="color: red">注:(x)以上代码重在演示Q其实这个需求可以在Spring中管理两个不同的SqlMapClient对象Q然后通过Spring的自动注入实现?br /> </span><br /> 本文为原创,Ƣ迎转蝲Q{载请注明出处<a title="BlogJava" href="http://www.aygfsteel.com/jnbzwm/">BlogJava</a>?br /> <img src ="http://www.aygfsteel.com/jnbzwm/aggbug/333721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jnbzwm/" target="_blank">??/a> 2010-10-04 10:31 <a href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/04/333721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>扩展Spring-实现对外部引用的属性文件进行加密、解?/title><link>http://www.aygfsteel.com/jnbzwm/archive/2010/10/02/333647.html</link><dc:creator>??/dc:creator><author>??/author><pubDate>Sat, 02 Oct 2010 04:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/jnbzwm/archive/2010/10/02/333647.html</guid><wfw:comment>http://www.aygfsteel.com/jnbzwm/comments/333647.html</wfw:comment><comments>http://www.aygfsteel.com/jnbzwm/archive/2010/10/02/333647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jnbzwm/comments/commentRss/333647.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jnbzwm/services/trackbacks/333647.html</trackback:ping><description><![CDATA[     摘要: l上一?扩展Spring-实现对外部引用的属性文件的 属性?q行加密、解?nbsp;Q这ơ要实现的是Ҏ(gu)个外部属性文件进行加密,Spring在加载这个外部属性文件时q行解密?分析q程与在 扩展Spring-实现对外部引用的属性文件的 属性?q行加密、解?nbsp;中介l的基本一_(d)只不q这ơ的入口在 PropertiesLoaderSupport.java q个抽象cȝloadPr...  <a href='http://www.aygfsteel.com/jnbzwm/archive/2010/10/02/333647.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jnbzwm/aggbug/333647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jnbzwm/" target="_blank">??/a> 2010-10-02 12:44 <a href="http://www.aygfsteel.com/jnbzwm/archive/2010/10/02/333647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>扩展Spring-实现对外部引用的属性文件的 属性?q行加密、解?/title><link>http://www.aygfsteel.com/jnbzwm/archive/2010/09/30/333541.html</link><dc:creator>??/dc:creator><author>??/author><pubDate>Thu, 30 Sep 2010 06:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/jnbzwm/archive/2010/09/30/333541.html</guid><wfw:comment>http://www.aygfsteel.com/jnbzwm/comments/333541.html</wfw:comment><comments>http://www.aygfsteel.com/jnbzwm/archive/2010/09/30/333541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jnbzwm/comments/commentRss/333541.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jnbzwm/services/trackbacks/333541.html</trackback:ping><description><![CDATA[     摘要: 当我们在使用Springq行开发时Q我们经怋用占位符引用属性文件的属性值来化我们的配置?qing)我们的配|具有更高的灉|性和通用性?使用q种方式的好处这里就不赘qC(jin)Q这里要讲的是怎样Ҏ(gu)外部属性文件的属性D行加密、解密?以下是我们熟(zhn)的配置Qjdbc.properties driver=oracle.jdbc.OracleDriver dburl=jdbc:oracle:thin:@1...  <a href='http://www.aygfsteel.com/jnbzwm/archive/2010/09/30/333541.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jnbzwm/aggbug/333541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jnbzwm/" target="_blank">??/a> 2010-09-30 14:34 <a href="http://www.aygfsteel.com/jnbzwm/archive/2010/09/30/333541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手?Spring中的PropertyPlaceholderConfigurer.javahttp://www.aygfsteel.com/jnbzwm/archive/2010/09/13/331898.html??/dc:creator>??/author>Mon, 13 Sep 2010 07:44:00 GMThttp://www.aygfsteel.com/jnbzwm/archive/2010/09/13/331898.htmlhttp://www.aygfsteel.com/jnbzwm/comments/331898.htmlhttp://www.aygfsteel.com/jnbzwm/archive/2010/09/13/331898.html#Feedback2http://www.aygfsteel.com/jnbzwm/comments/commentRss/331898.htmlhttp://www.aygfsteel.com/jnbzwm/services/trackbacks/331898.html阅读全文

]]>
Quartz+Spring 自定义作业调度(作业在DB中配|)(j)http://www.aygfsteel.com/jnbzwm/archive/2010/09/06/331239.html??/dc:creator>??/author>Mon, 06 Sep 2010 11:08:00 GMThttp://www.aygfsteel.com/jnbzwm/archive/2010/09/06/331239.htmlhttp://www.aygfsteel.com/jnbzwm/comments/331239.htmlhttp://www.aygfsteel.com/jnbzwm/archive/2010/09/06/331239.html#Feedback0http://www.aygfsteel.com/jnbzwm/comments/commentRss/331239.htmlhttp://www.aygfsteel.com/jnbzwm/services/trackbacks/331239.html阅读全文

]]>
վ֩ģ壺 | ʼ| | ˫| | | Ƽ| | | | ̨| | | | | | | ɽ| ˫| | ͨμ| ͨ| ̩| | ˲| | | | | | лͨ| | | | ͼ| | | | | ʲ| ƽԶ|