Spring 2.X 中AOP的使用浅析
http://tech.ddvip.com 2007年09月01日 社区交流
内容摘要:Spring2.X下的切面有两种实现方式,一种是以Java文件定义切面(其只是普通的Java类),然后在配置文件中声明定义的切面;另一种是在Java类中引入和AOP相关的元数据(注释)。
@Aspect
public class LogingAspect {
@Pointcut( " execution(* hibernatesample.service.*.*(..)) " )
public void businessService(){}
@After( " businessService() " )
public void logMethod(JoinPoint jp){
System.err.println(jp.getTarget().getClass());
System.err.println(jp.getSignature().getName());
}
}
而简化后的配置文件可以去除上面的如下和 logAspect 相关的配置信息:
< aop:aspect id ="logAspect" ref ="logAspectTarget" >
< aop:pointcut id ="businessService" expression ="execution(* hibernatesample.service.*.*(..))" />
< aop:after pointcut-ref ="businessService" method ="logMethod" />
</ aop:aspect >
< bean id ="logAspectTarget" class ="hibernatesample.service.util.LogingAspect" ></ bean >
还没有完,为了使 Spring 应用 LogingAspect 的注释,需要在配置文件中添上
<aop:aspectj-autoproxy/>
如果觉得事务的配置没有使用注释更简洁(我倒不会有这样的想法,毕竟在配置文件中声明的事务只是那么固定的几段,除非作用于类上的事务逻辑上很复杂),也可以使用Spring提供的事务注释作用于类文件上,这可是更细粒度的事务声明了。
坦率的说,由于时间有限,该文写的比较粗糙。对于Spring AOP有兴趣并有疑问的朋友,可以参考Spring的文档,它的文档做的还是不错的。
来源:javablog 作者:边城愚夫 责编:豆豆技术应用