Tapestry中使用拦截器实现Hibernate的事务管理
2014-12-05 15:22
357 查看
从Tapestry4.0开始使用了Hivemind作为注入容器,合理有效的使用该容器,可以极大的简化开发工作,减少代码量.比如说,在开发Hibernate应用时,就有一个关于事务控制的问题,在Spring中可以使用Spring来管理事务,但是我觉得那样对自己的代码侵入性比较大,而利用Hivemind中的拦截器,则可以方便的解决此问题,而且侵入性小.
步骤是这样的:1.配置Hibernate
Session服务,并保证该服务是线程级的.2.配置拦截器服务,并向其注入Hibernate
Session服务.3.配置DAO服务,并配置其拦截器为上一步的拦截器.
具体的实现如下:1.配置文件
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!--
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Copyright 2004, 2005 The Apache Software Foundation
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Licensed under the Apache License, Version 2.0 (the "License");
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
you may not use this file except in compliance with the License.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
You may obtain a copy of the License at
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
http://www.apache.org/licenses/LICENSE-2.0
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Unless required by applicable law or agreed to in writing, software
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
distributed under the License is distributed on an "AS IS" BASIS,
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
See the License for the specific language governing permissions and
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
limitations under the License.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
-->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<module id="mymodule" version="4.0.0">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="userDao" interface="com.ims.dao.UserInfoDAO">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<construct class="com.ims.dao.impl.UserinfoDAOImpl">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<set-object property="session" value="service:hibernateSession"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</construct>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<interceptor service-id="ims.SessionInterceptor">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<include method="make*"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</interceptor>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="SessionInterceptor" interface="org.apache.hivemind.ServiceInterceptorFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<construct class="com.hivemind.util.interceptor.SessionInterceptor" >
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<set-object property="session" value="service:hibernateSession" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</construct>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="hibernateHivemindFactory" interface="org.apache.hivemind.ServiceImplementationFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<construct class="com.hivemind.util.HibernateHivemindFactory" initialize-method="init">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<set-object property="threadEventNotifier" value="service:hivemind.ThreadEventNotifier"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</construct>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="hibernateSession" interface="org.hibernate.Session">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory service-id="ims.hibernateHivemindFactory" model="threaded">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<config file="hibernate.cfg.xml"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</module>
2.代码:
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* SessionInterceptor.java
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
* */
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package com.hivemind.util.interceptor;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.InvocationHandler;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.InvocationTargetException;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.Method;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.Proxy;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.commons.logging.Log;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.Element;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.InterceptorStack;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.ServiceInterceptorFactory;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.internal.Module;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.service.impl.LoggingUtils;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.util.StringUtils;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.hibernate.Session;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.hibernate.Transaction;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* Hibernate Session的拦截器,对符合指定条件的方法进行拦截, 加入事务处理功能。
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class SessionInterceptor implements ServiceInterceptorFactory {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String[] required_method;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Session session;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setSession(Session session) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.session = session;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 核心服务方法,生成拦截器
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void createInterceptor(InterceptorStack stack,
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Module invokingModule, List parameters) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Log log = stack.getServiceLog();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < parameters.size(); i++) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object obj = parameters.get(i);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (obj instanceof Element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Element element = (Element) obj;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if ("include".equals(element.getElementName())) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String value = element.getAttributeValue("method");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
required_method = StringUtils.split(value);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object obj = stack.peek();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
InvocationHandler handler = new HibernateSessionInvocationHandler(log,
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
obj, session, required_method);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object interceptor = Proxy.newProxyInstance(invokingModule
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
.getClassResolver().getClassLoader(), new Class[] { stack
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
.getServiceInterface() }, handler);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
stack.push(interceptor);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 拦截器方法调用处理类。
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class HibernateSessionInvocationHandler implements InvocationHandler {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Log log;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 原始对象
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Object delegate;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Session session;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 配置的方法名称列表
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String[] requredName;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public HibernateSessionInvocationHandler(Log log, Object delegate,
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Session session, String[] required_name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.log = log;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.delegate = delegate;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.session = session;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.requredName = required_name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 处理拦截到的方法
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public Object invoke(Object proxy, Method method, Object[] args)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
throws Throwable {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object result = null;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
boolean debug = log.isDebugEnabled();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Transaction tx = null;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (debug) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.entry(log, method.getName(), args);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (isMatch(method.getName(), requredName)) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tx = session.beginTransaction();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
result = method.invoke(delegate, args);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (debug) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (method.getReturnType() == void.class)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.voidExit(log, method.getName());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exit(log, method.getName(), result);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tx.commit();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return result;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InvocationTargetException ex) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tx.rollback();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (Exception e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Throwable targetException = ex.getTargetException();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (debug)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exception(log, method.getName(),
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
targetException);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
throw targetException;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
result = method.invoke(delegate, args);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (debug) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (method.getReturnType() == void.class)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.voidExit(log, method.getName());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exit(log, method.getName(), result);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return result;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InvocationTargetException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Throwable targetException = e.getTargetException();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (debug)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exception(log, method.getName(),
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
targetException);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
throw targetException;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 当前调用的方法名称是否符合指定的条件
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* @param name
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* @param names
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* @return
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private boolean isMatch(String name, String[] names) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (names == null)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < names.length; i++) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String sname = names[i];
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (name.equals(sname) || sname.endsWith("*")
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
&& name.startsWith(sname.substring(0, sname.length() - 1))
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
|| sname.startsWith("*")
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
&& name.endsWith(sname.substring(1)))
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
原文 :http://www.blogjava.net/javabin/archive/2006/10/23/56250.html
步骤是这样的:1.配置Hibernate
Session服务,并保证该服务是线程级的.2.配置拦截器服务,并向其注入Hibernate
Session服务.3.配置DAO服务,并配置其拦截器为上一步的拦截器.
具体的实现如下:1.配置文件
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<!--
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Copyright 2004, 2005 The Apache Software Foundation
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Licensed under the Apache License, Version 2.0 (the "License");
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
you may not use this file except in compliance with the License.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
You may obtain a copy of the License at
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
http://www.apache.org/licenses/LICENSE-2.0
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Unless required by applicable law or agreed to in writing, software
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
distributed under the License is distributed on an "AS IS" BASIS,
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
See the License for the specific language governing permissions and
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
limitations under the License.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
-->
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<module id="mymodule" version="4.0.0">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="userDao" interface="com.ims.dao.UserInfoDAO">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<construct class="com.ims.dao.impl.UserinfoDAOImpl">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<set-object property="session" value="service:hibernateSession"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</construct>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<interceptor service-id="ims.SessionInterceptor">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<include method="make*"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</interceptor>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="SessionInterceptor" interface="org.apache.hivemind.ServiceInterceptorFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<construct class="com.hivemind.util.interceptor.SessionInterceptor" >
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<set-object property="session" value="service:hibernateSession" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</construct>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="hibernateHivemindFactory" interface="org.apache.hivemind.ServiceImplementationFactory">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<construct class="com.hivemind.util.HibernateHivemindFactory" initialize-method="init">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<set-object property="threadEventNotifier" value="service:hivemind.ThreadEventNotifier"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</construct>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service-point id="hibernateSession" interface="org.hibernate.Session">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<invoke-factory service-id="ims.hibernateHivemindFactory" model="threaded">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<config file="hibernate.cfg.xml"/>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</invoke-factory>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service-point>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</module>
2.代码:
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* SessionInterceptor.java
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
* */
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package com.hivemind.util.interceptor;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.InvocationHandler;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.InvocationTargetException;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.Method;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.lang.reflect.Proxy;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.commons.logging.Log;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.Element;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.InterceptorStack;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.ServiceInterceptorFactory;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.internal.Module;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.service.impl.LoggingUtils;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.hivemind.util.StringUtils;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.hibernate.Session;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.hibernate.Transaction;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* Hibernate Session的拦截器,对符合指定条件的方法进行拦截, 加入事务处理功能。
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class SessionInterceptor implements ServiceInterceptorFactory {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String[] required_method;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Session session;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setSession(Session session) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.session = session;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 核心服务方法,生成拦截器
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public void createInterceptor(InterceptorStack stack,
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Module invokingModule, List parameters) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Log log = stack.getServiceLog();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < parameters.size(); i++) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object obj = parameters.get(i);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (obj instanceof Element) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Element element = (Element) obj;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if ("include".equals(element.getElementName())) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String value = element.getAttributeValue("method");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
required_method = StringUtils.split(value);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object obj = stack.peek();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
InvocationHandler handler = new HibernateSessionInvocationHandler(log,
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
obj, session, required_method);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object interceptor = Proxy.newProxyInstance(invokingModule
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
.getClassResolver().getClassLoader(), new Class[] { stack
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
.getServiceInterface() }, handler);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
stack.push(interceptor);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 拦截器方法调用处理类。
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
class HibernateSessionInvocationHandler implements InvocationHandler {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Log log;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 原始对象
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Object delegate;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private Session session;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 配置的方法名称列表
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
private String[] requredName;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public HibernateSessionInvocationHandler(Log log, Object delegate,
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Session session, String[] required_name) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.log = log;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.delegate = delegate;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.session = session;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.requredName = required_name;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 处理拦截到的方法
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public Object invoke(Object proxy, Method method, Object[] args)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
throws Throwable {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Object result = null;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
boolean debug = log.isDebugEnabled();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Transaction tx = null;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (debug) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.entry(log, method.getName(), args);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (isMatch(method.getName(), requredName)) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tx = session.beginTransaction();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
result = method.invoke(delegate, args);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (debug) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (method.getReturnType() == void.class)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.voidExit(log, method.getName());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exit(log, method.getName(), result);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tx.commit();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return result;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InvocationTargetException ex) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
tx.rollback();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (Exception e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Throwable targetException = ex.getTargetException();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (debug)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exception(log, method.getName(),
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
targetException);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
throw targetException;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} else {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
result = method.invoke(delegate, args);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (debug) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (method.getReturnType() == void.class)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.voidExit(log, method.getName());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exit(log, method.getName(), result);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return result;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
} catch (InvocationTargetException e) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Throwable targetException = e.getTargetException();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (debug)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
LoggingUtils.exception(log, method.getName(),
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
targetException);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
throw targetException;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* 当前调用的方法名称是否符合指定的条件
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* @param name
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* @param names
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
* @return
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private boolean isMatch(String name, String[] names) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (names == null)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < names.length; i++) {
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
String sname = names[i];
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (name.equals(sname) || sname.endsWith("*")
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
&& name.startsWith(sname.substring(0, sname.length() - 1))
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
|| sname.startsWith("*")
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
&& name.endsWith(sname.substring(1)))
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
原文 :http://www.blogjava.net/javabin/archive/2006/10/23/56250.html
相关文章推荐
- 使用Spring 2.0 新特性实现声明式事务管理-基于Annotation
- Spring学习笔记(16)----使用Spring配置文件实现事务管理
- 使用JOTM实现分布式事务管理(多数据源)
- Spring整合Hibernate:2、使用Annotation方式进行声明式的事务管理
- 使用JOTM实现分布式事务管理(多数据源)
- (ZT)使用JOTM实现分布式事务管理(多数据源)
- 如何使用Hibernate来管理事务
- Spring整合hibernate的事务属性介绍以及声明式事务管理 (使用Annotation和xml)
- Spring整合Hibernate开发 - 使用事务管理器操作数据库 - 主配置文件
- 使用拦截器实现权限管理
- 使用JOTM实现分布式事务管理(多数据源)
- 使用spring实现事务管理(@transactional)的遇到的两个异常:java.lang.noclassdeffounderror:org/objectweb.asm
- HibernateTransactionManager 事务管理实现
- spring mvc+hibernate 实现事务管理(全注解版)
- 使用TransactionScope 实现事务管理
- 使用Spring配置文件实现事务管理
- Spring整合hibernate的事务属性介绍以及声明式事务管理 (使用Annotation和xml)
- Spring整合hibernate的事务属性介绍以及声明式事务管理 (使用Annotation和xml)
- hibernate 之 session在service层实现事务管理
- Spring学习笔记(18)----使用Spring配置文件实现事务管理