compass aspectjによるcontentフィールドの追加

1789 ワード

上記を通して
http://nlslzf.iteye.com/admin/blogs/239374
compassをシステムに統合できますが、彼はすべてのpojoにハイライトを提供するフィールドを要求する問題があります.これは私たちが処理しにくい可能性があります.もちろんcontentをtostringメソッドに転送し、aspectjを通じて各pojoにメソッドgetContentを注入し、このメソッドは自動的にtoStringを呼び出します.
コードは次のとおりです.

package com.yyhy.java.search.compass;

public interface Compassable {
  public String getContent();
  
}

package com.yyhy.java.search.compass;

public class DefaultCompassableImpl implements Compassable {

	@Override
	public String getContent() {
		System.out.println("error aop");
		return "error aop";
	}

}

package com.yyhy.java.search.compass;

import org.aspectj.lang.JoinPoint;

public aspect CompassAOP {

	declare parents: com.yyhy.java.GenericCoder.* extends DefaultCompassableImpl;
    declare parents: com.yyhy.java.Privilege.* extends DefaultCompassableImpl;
    declare parents: com.yyhy.hx.zcdfk.* extends DefaultCompassableImpl;
    declare parents: com.yyhy.hx.jgpmk.* extends DefaultCompassableImpl;
    declare parents: com.yyhy.log.* extends DefaultCompassableImpl;
    declare parents: com.yyhy.hx.zyqlk.* extends DefaultCompassableImpl;
public pointcut compass():execution(* *.getContent(..));
Object around():compass(){
   return thisJoinPoint.getThis().toString();
}
}


最後のaspectに重点を置き,まずdeclare parentsコマンドにより,インタフェースをマッチングpojoに注入する.
次にaroundにより呼び出しをブロックし,それを切り込まれたオブジェクトのtoStringメソッドに変換する.