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 nameentity --class ~.domain.PersonAction
field string --fieldName name
web mvc setup
web mvc all --package ~.web
这里我们创建两个实体类,一个是Person ,另一个是 PersonAction
它们没有任何关系。各有一个name字段。界面效果如下:
![](https://images.cnblogs.com/cnblogs_com/JimmyYu/201203/201203242255439572.png)
我们需要上面这个需求需要,当我们创建一个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的说明文档。