- 浏览: 373109 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
lippeng:
楼主,你好!这篇中提到的一个话题,是我现在非常关心的,我自己还 ...
使用JUnit测试通过 HttpClient(https协议)访问支付宝接口时不能自动获得证书的解决办法 -
snoopy7713:
[2014-03-14 17:55:06.651] TCP ...
刚完成Struts的Virgo插件,分享一下设计思路和Virgo OSGi内部的独特机制 -
snoopy7713:
需要看一下,你的代码说的挺模糊的。我的联系方式QQ 16200 ...
刚完成Struts的Virgo插件,分享一下设计思路和Virgo OSGi内部的独特机制 -
roronjavaeye:
不错,受教了
java_class反编译后的代码还原 -
daoyongyu:
讲的很好,很详细。
Struts2配置文件详解——struts.properties
(singleton,unlimited , poolable), public class BeanFactory { .... private Object getBeanProxy(BeanConfiguration config)throws UtilException { Object bean = null ; Object proxy = null ; TransactionDelegate delegate = null ; String beanName = config.getImpl(); String[] interfaceNames = config.getName(); Class[] cls = new Class[interfaceNames.length] ; try { for (int i = 0; i < interfaceNames.length; i++) { System.out.println("cls ="+interfaceNames); cls = Class.forName(interfaceNames.trim()) ; } if (BeanConfiguration.SINGLETON.equals(config.getMethod())) { bean = cache.getFromCache(beanName) ; if (bean == null) { bean = Class.forName(beanName).newInstance() ; cache.putIntoCache(beanName , bean) ; } delegate = new TransactionDelegate() ; delegate.setObject(bean) ; proxy = Proxy.newProxyInstance(delegate.getClass().getClassLoader() , cls , delegate) ; } else if (BeanConfiguration.UNLIMITED.equals(config.getMethod())) { bean = Class.forName(beanName).newInstance() ; delegate = new TransactionDelegate(); delegate.setObject(bean); proxy = Proxy.newProxyInstance(delegate.getClass().getClassLoader() , cls , delegate); } else if (BeanConfiguration.POOLED.equals(config.getMethod())) { ServiceLog.debug("beanPool instance ="+beanPool); if (beanPool == null) { throw new UtilException("系统没有发现相应的池,不支持池管理Bean" , -1); } ServiceLog.info("current facade bean pool active num is ="+beanPool.currentActiveNum(beanName)); ServiceLog.info("current facade bean pool idle num is ="+beanPool.currentIdleNum(beanName)); bean = beanPool.get(beanName) ; delegate = new TransactionDelegate() ; delegate.setObject(bean); ServiceLog.info("current facade bean pool size is ="+delegate); proxy = Proxy.newProxyInstance(delegate.getClass().getClassLoader() , cls , delegate); } else { throw new UtilException("错误的池的Bean管理方式" , -1); } System.out.println("从池中取出的bean 为="+bean); return proxy ; } catch (UtilException ex) { ex.printStackTrace(); ServiceLog.error(ex.getMessage() , ex); throw ex ; } catch (Exception ex) { ex.printStackTrace(); ServiceLog.error(ex.getMessage() , ex); throw new UtilException(ex); } } ...... } package com.goldenchance.amis.framework.proxy; import java.lang.reflect.Method; import java.lang.reflect.InvocationHandler; import com.goldenchance.common.framework.OperationService; import com.goldenchance.common.exception.FacadeAccessException; import com.goldenchance.common.util.TransactionContext; import com.goldenchance.common.util.TransactionContextFactory; import com.goldenchance.common.log.ServiceLog; import java.util.*; import java.lang.reflect.*; /** * 事务代理类 * <p>Title: 实时监控系统</p> * <p>Description: 通过动态代理技术,实现事务处理的动态封装</p> * @version 1.0 */ public class TransactionDelegate implements InvocationHandler { private final static List DEFAULT_METHOD_LIST = new ArrayList(); private TransactionContextFactory factory ; private Object object; public TransactionDelegate() { factory = TransactionContextFactory.newFactory(); } public void finalize() { this.release(); } public void release() { object = null ; } /** * 将Object对象中的方法设置为纳入默认忽略的方法集合中 */ static { DEFAULT_METHOD_LIST.add("equals"); DEFAULT_METHOD_LIST.add("getClass"); DEFAULT_METHOD_LIST.add("hashCode"); DEFAULT_METHOD_LIST.add("notify"); DEFAULT_METHOD_LIST.add("notifyAll"); DEFAULT_METHOD_LIST.add("toString"); DEFAULT_METHOD_LIST.add("wait"); } /** * 实现接口的invoke方法 * @see java.lang.reflect.InvocationHandler.invoke(Object , Method , Object[]) */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String name = method.getName() ; Object result = null ; ServiceLog.info("开始调用"+object.getClass().getName()+"的方法"+name); if (DEFAULT_METHOD_LIST.contains(name)) { result = method.invoke(object , args); ServiceLog.info("Start : 调用"+object.getClass().getName()+"的方法"+name); return result ; } else if (object instanceof OperationService){ //如果代理对象是OperationService实现类,则说明它支持事务处理 OperationService serivce = (OperationService)object ; TransactionContext tc = factory.getTransactionContext(); try { serivce.setTransactionContext(tc); if (name.startsWith("search")) { //如果是查询方法,则不进行事务封装 result = method.invoke(object , args) ; } else { tc.beginTransaction(); try { result = method.invoke(object , args) ; tc.commitTransaction(); } catch (Exception ex) { ServiceLog.error(ex.getMessage() , ex) ; if (ex instanceof FacadeAccessException) { FacadeAccessException actual = (FacadeAccessException) ex ; tc.rollbackTransaction() ; throw actual ; } throw ex ; } } return result ; } finally { tc.closeConnection(); ServiceLog.info("End : 调用"+object.getClass().getName()+"的方法"+name); } } else { result = method.invoke(object , args) ; return result ; } } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } }
http://www.jdon.com/jivejdon/thread/18095.html
you ge shi cuo wu............
发表评论
-
java_class反编译后的代码还原
2012-03-18 00:06 1778java class 利用jad 反编译之后,偶尔回碰到 ... -
ThreadLocal的几种误区
2012-01-10 09:48 885最近由于需要用到ThreadLocal,在网上搜索 ... -
深入解析OGNL投影
2011-12-16 15:15 1908先看这个表达式:list.{#me=#this,#root.m ... -
浅谈JAVA ThreadPoolExecutor
2011-01-28 16:36 1332这篇文章分为两部分 ... -
ant echo message 特殊字符转换
2011-01-27 11:54 1727< < > &a ... -
hibernate------hql总结
2010-08-24 12:52 8521. 查询整个映射对象所 ... -
log4j additivity 作用
2010-08-11 22:15 1975log4j.rootLogger=debug,stdout ... -
Log4j 集群环境下的 处理方案
2010-08-11 21:17 3216需求:近期有个项目要 ... -
构建Java并发模型框架
2010-07-12 17:04 917Java的多线程特性为构建 ... -
Java 程序中的多线程
2010-07-12 17:03 820由于在语言级提供了线 ... -
JAVA 线程 基础概念
2010-07-12 17:00 1035Java 有几程方法可以实 ... -
在 Java 平台上进行多线程编程的缺陷
2010-07-12 16:58 970Java 语言的并发编程 就其自身来说,并发编程是一种 ... -
c3p0-0.9.1.2数据库连接池
2010-06-17 11:46 1378C3PO是一个开放源代码的JDBC数据源实现项目,它在li ... -
Axis2快速上手指南
2010-06-03 17:59 816http://hideto.iteye.com/blog/56 ... -
C3P0连接池详细配置与实现
2010-05-31 17:33 1050<c3p0-config> <defau ... -
实例讲解:JAVA SOAP技术
2010-05-25 18:19 2383Very Simple Object Access Proto ... -
Tomcat 5.5 JNDI Resource 配置
2010-05-25 11:14 1657本文来自CSDN博客,转载请标明出处:http://blog. ... -
SSH2 jar
2010-05-21 14:51 1695在JavaEE企业级开发中, ... -
让httpclient接受所有ssl证书https 分享
2010-04-29 11:21 5095访问https 资源时,让httpclient接受所有ssl证 ... -
使用JUnit测试通过 HttpClient(https协议)访问支付宝接口时不能自动获得证书的解决办法
2010-04-29 11:17 5253最近在做一个通过 HttpCl ...
相关推荐
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在减少代码的重复性和增强可维护性,特别是在处理系统中的横切关注点时。这些关注点,如日志、事务管理、安全检查等,往往分散在系统的各个部分...
**AOP Alliance简介** AOP Alliance是一个开源项目,它的全称是Aspect Oriented Programming(面向切面编程)Alliance,是Java平台上的一个接口集合,为面向切面编程的实现提供了一个统一的API。这个库的主要目的是...
面向切面编程(AOP)是一种编程范式,旨在将横切关注点(如日志、安全等)与业务逻辑分离,从而提高模块化。AOP通过预定义的“切面”对横切关注点进行模块化,从而可以在不修改业务逻辑代码的情况下增加新功能。动态...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...
在Java应用中,aopalliance.jar包扮演着至关重要的角色,它包含了一些核心接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口定义了拦截器和通知的概念,它们是AOP的...
Spring Boot AOP(面向切面编程)是一种强大的设计模式,它允许我们在不修改现有代码的情况下,插入额外的功能或监控代码。在Spring框架中,AOP主要用于日志记录、事务管理、性能统计等场景。本示例是关于如何在...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员定义“切面”,这些切面可以封装跨越多个对象的行为或责任。在Java应用中实现AOP通常需要依赖于一些外部库,这些库在你提供的标题和描述中有所...
在IT行业中,AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在提高软件的模块化程度,将关注点分离。在Java世界里,AOP常用于处理日志、事务管理、权限检查等横切关注点。当我们谈到“AOP...
在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
在给出的XML配置中,`<aop:config>`元素开启AOP支持,而`<aop:aspect>`元素用于定义切面,其内部通过`<aop:pointcut>`定义切点,并通过`<aop:before>`和`<aop:after>`指定通知。 为了使用这些配置,我们需要在代码...
在IT行业中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种设计模式,它旨在提高软件的模块化程度,将关注点分离,使业务逻辑与系统服务(如日志、事务管理、安全控制等)解耦。C#作为.NET框架的主要...
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,旨在通过将关注点分离,使得系统设计更加模块化。AOP的核心思想是将应用程序的横切关注点(如日志、事务管理、安全检查等)从核心业务逻辑中解耦...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。...
在.NET开发环境中,C#语言提供了丰富的特性(Attributes)、依赖注入(DI)和面向切面编程(AOP)等机制,使得我们可以构建更加灵活、可维护的代码。本主题将深入探讨如何使用C#和AOP来动态截获异常,以实现更高级别...
最后,`aopalliance-1.0.0.jar`是AOP联盟提供的一个接口库,它定义了一些通用的AOP接口,比如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,使得不同的AOP框架...
《面向切面编程(AOP)的工作原理与实践》 面向切面编程(Aspect-Oriented Programming,简称AOP)是软件开发中的一个重要概念,它旨在解决程序中的横切关注点,即那些跨越多个模块、类或方法的共同功能,如日志、...
《aopalliance-1.0.jar:AOP联盟的核心库解析》 在Java开发领域,面向切面编程(Aspect-Oriented Programming, AOP)是一种重要的编程范式,它旨在将关注点分离,使系统设计更为模块化,降低耦合度。而aopalliance-...
### Spring中的AOP不生效的原因及解决方法 在Java开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的编程思想和技术手段,主要用于处理横切关注点问题,如日志记录、性能统计、安全控制、...