howto:如何在项目中使用AOP--Jimmy

        在财务任务中有一个需求,将用户输入的表单对象转换成另一个对象,保存到服务器中。
这个功能我们可以通过修改roo生成的代码来实现。但是那不是好的方法,因为可能重新生成时会将你写的代码覆盖掉。
同时也影响项目的封装性。
如何来实现这个功能,而不更 改roo生成的代码呢?这里我们需要使用Aop来实现。(AOP的文档可以在 这里 找到)
 
        我来做一个简单的例子来说明如何使用
首先创建一个Roo项目,命令如下
 
// Spring Roo 1.1.5.RELEASE [rev d3a68c3] log opened at 2011-10-11 14:28:39
project --topLevelPackage com.pccw.finance
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY 
entity --class ~.domain.Person 
field string --fieldName name
entity --class ~.domain.PersonAction
field string --fieldName name

web mvc setup
web mvc all --package ~.web
        这里我们创建两个实体类,一个是Person ,另一个是 PersonAction
它们没有任何关系。各有一个name字段。界面效果如下:
 
        我们需要上面这个需求需要,当我们创建一个Person对象时,也同时创建一个PersonAction对象。
实现的方法是:
在controller文件中增加一个方法,让该方法在Person创建的时候运行。我的实现是:
 
@RooWebScaffold(path = "people", formBackingObject = Person.class)
@RequestMapping("/people")
@Controller
@Aspect
public class PersonController {
    @AfterReturning(value = "execution(* com.pccw.finance.domain.Person.persist(..))")
    public void PersonDto(JoinPoint joinPoint){
        Person p = (Person)joinPoint.getThis();
        PersonAction pa = new PersonAction();
        pa.setName("Person Name is " + p.getName());
        pa.persist();
    }
}
        红色部分是我后期编写上去的,他就可以实现,Person保存后,自动向PersonAction中增加记录的功能。
这个里我编写代码的含义,大家可以通过阅读AOP的说明文档。
posted on 2012-03-24 22:56  Jimmy_June  阅读(228)  评论(0编辑  收藏  举报