我们的系统采用SSH架构,现根据需求需要这样处理,系统初始化后获取系统所有domain对象,然后根据业务要求记录操作。我想问问,在系统中如何获取所有domain对象?
你说SSH框架可是Spring Struts Hibernate?如果是的话,办法还是很多的。
你的需求:“根据业务要求记录domain的操作”,如果我分析不差,这个使用Aop织入可以满足的你的要求,正好有一段代码供你参考:
[b]DomainA.java[/b]
[code="java"]
package aop;
public class DomainA {
public void action() {
System.out.println("DomainA action.");
}
}[/code]
[b]ActionAop.java[/b]
[code="java"]package aop;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class ActionAop {
@Pointcut("execution(* org.koala.orm.aop.*.*(..))")
public void action() {
}
@After("action()")
public void actionAopAfter() {
System.out.println("#############After##########");
}
@Before("action()")
public void actionAopBefore() {
System.out.println("#############Before##########");
}
}
[/code]
首先,你要确认aspectjweaver.jar和aspectjrt.jar在的classpath中,可以参考[url]http://www.eclipse.org/aspectj/[/url]可以使用aspectj提供的编译工具,也可以将aspectj集成在ant或者maven中使用,网上的范例有很多。
测试代码:
[b]DomainAopTest.java[/b]
[code="java"]package aop;
import org.koala.orm.aop.DomainA;
import org.testng.annotations.Test;
public class DomainAopTest {
@Test
public void testSay() {
DomainA a = new DomainA();
a.action();
}
}
[/code]
最终的结果演示,就可以处理你Domain的业务动作了:
[code="txt"]#############Before##########
DomainA action.
#############After##########[/code]
[url]http://msdn.microsoft.com/zh-cn/library/x4ckfds0(v=VS.80).aspx[/url]
希望有所帮助!
你说的domain是指domain classes吗,比如com.foo.Post, com.foo.User这些类?
如果用的是grails,可以
[code="groovy"]
def domainArtefacts = grailsApplication.getArtefacts('Domain')
[/code]
否则,可以考虑用Java反射