论坛首页 Java企业应用论坛

使用java动态代理机制实现AOP是丑陋的

浏览 13622 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (7)
作者 正文
   发表时间:2008-05-07  
spring可以封装,可以参照一下源码~~~
0 请登录后投票
   发表时间:2008-05-15  
clarkhill 写道

我把代码贴下来:这段代码是实现了InvocationHandler接口的部分。将日志代码放进去了。

public class LogHandler implements InvocationHandler {   private Logger logger = Logger.getLogger(this.getClass().getName());   private Object delegate;   public LogHandler(Object delegate){    this.delegate = delegate;   }   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {   Object o = null;   try {    logger.info("method stats..." + method);    o = method.invoke(delegate,args);    logger.info("method ends..." + method);   } catch (Exception e){    logger.info("Exception happends...");    //excetpion handling.   }   return o;  } } 

下面是客户端调用代码:

BusinessInterface businessImp = new BusinessObject();  InvocationHandler handler = new LogHandler(businessImp);  BusinessInterface proxy = (BusinessInterface) Proxy.newProxyInstance(  businessImp.getClass().getClassLoader(),  businessImp.getClass().getInterfaces(),  handler);  proxy.processBusiness(); 

 businessImp是我们的一个业务实现。我为什么说这种方法比较丑陋呢?就是使用了这些和业务无关的接口和Proxy代理类。虽然这些是jdk提供的,但是给我的感觉是我在写一些和我应用无关的代码。当然上面仅仅是一个简单的示例。也可以想一些办法封装这些操作。但是总给我的感觉是有些怪异,所以希望问一下还有其他的什么实现。惭愧。写这些内容的时候,深感自己水平不行,贻笑大方了。不过刚才想想我的这个帖子标题,的确不好,不应该用这种结论式的标题。给人感觉不好。其实我是想和人探讨的。

难道你不会把proxy的获取封装起来,就不用看代理的代码了

0 请登录后投票
   发表时间:2008-05-15  
利用SPRING2.5的ANNOTATION方式实现AOP,这个够不够优雅?
 
<context:annotation-config />
<aop:aspectj-autoproxy />


@Aspect
public class AppExceptionInterceptor {
	/**
	 * 应用异常消息服务
	 */
	private AppExceptionMessageService appExceptionMessageService;

	/**
	 * 系统异常消息拦截器
	 * @param exception
	 */
	@AfterThrowing(pointcut = "execution(* com.dwr.Dwr*.*(..))", throwing = "exception")
	public void afterThrow(Exception exception) {
		if (exception instanceof AppBizException) {
			AppBizException abe = (AppBizException) exception;
			appExceptionMessageService.processMessage(abe);
		} else if (exception instanceof AppRTException) {
			AppRTException are = (AppRTException) exception;
			appExceptionMessageService.processMessage(are);
		}
	}

	public AppExceptionMessageService getAppExceptionMessageService() {
		return appExceptionMessageService;
	}

	public void setAppExceptionMessageService(
			AppExceptionMessageService appExceptionMessageService) {
		this.appExceptionMessageService = appExceptionMessageService;
	}
}
0 请登录后投票
   发表时间:2008-07-29  
我们科室由一个自己用的轻量级的AOP框架,但是细节暴露太多一般应用开发人员使用起来比较麻烦需要了解java.lang.reflect相关类
所以正打算封装一下提供一个更平一点的接口
另外根据老大的意思还需要写个工厂控制业务领域模型对象的实例,大家有没有好建议?
0 请登录后投票
   发表时间:2008-07-29  
同意楼主的,确实丑陋。因为引入了很多业务无关的代码,借助容器和annotation实现就优雅了很多。
0 请登录后投票
   发表时间:2008-11-02  
感觉楼主的词用大了,自己对AOP理解也不深,就来说丑陋。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics