Spring Aopの応用


こんにちは、今回はSpring Aopのいくつかのよくある応用について話します.     まず、Spring Aopを理解してみましょう.なぜそれがあるのか、OOPの代わりにできますか?開発に何を持ってきてくれますか?またどんな応用がありますか?これらの疑問を持ってSpring Aopの知識を検討します.    第一に、使用前に該当するSpringパッケージとSpring依存パッケージを追加する必要があります.       メインバッグ:org.springframe ewark.aop-3.5.RELEASE.jarとorg.springframe ebook.aspects-3.5.RELEASE.jar       依存パック:comp.springsource.org.aopalliance-1.00.jarとcome.springsource.net.s.cglib-2.20.jar    ここでは、comp.sprigsource.net.sf.cglib-2.2.jarを使って、cglibの中のクラスを使って、具体的な種類を阻止することができます.インタフェースだけではなく、例えばController類です.jdkの反射メカニズムはみんな知っています.cglibの機能はそれと似ています.それよりもっと強いです.    第二に、異常処理の実現: 
 
public class MyException1 implements HandlerExceptionResolver
 {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object arg2, Exception ex) {
	System.out.println("      ......");
          if (ex instanceof ArrayIndexOutOfBoundsException) {
          System.out.println(ex);
          request.setAttribute("error", "         ....");
          return new ModelAndView("/SpringAop/exception/error.jsp");
          } else if (ex instanceof RuntimeException) {
                         System.out.println(ex);
	           request.setAttribute("error", "        ....");
     return new ModelAndView("/SpringAop/exception/error.jsp");
            }
	return null;
}

}
    第三に、基本ブロックの実装:
 
public class MyInterceptor implements HandlerInterceptor {

public void afterCompletion(HttpServletRequest arg0,
	HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("   ....");
	}
public void postHandle(HttpServletRequest arg0, 
HttpServletResponse arg1,Object arg2, ModelAndView arg3) 
                                        throws Exception {
		System.out.println("   ......");
	}

public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2) throws Exception {
		System.out.println("   ....");
		return false;
}
    第四:ログを例にとって、注釈を使ってAOPを実現する.
 
    ステップ1:Springプロファイルにコメントを入れる
 
<aop:aspectj-autoproxy />
    ステップ2:ログエージェントを書く
 
@Before("pointCut()")
public void before(JoinPoint jp) {
//       
String className = jp.getTarget().getClass().toString();
className = className.substring(className.indexOf("com"));
//         
String signature = jp.getSignature().toString();
//      
String methodName = signature.substring(signature.lastIndexOf(".") + 1,signature.indexOf("("));
//         
Object[] args = jp.getArgs();
if (args != null) {
     for (int i = 0; i < args.length; i++) {
	System.out.println("args[" + i + "] =" + args[i]);
      }
}
System.out.println("      " + className);
System.out.println("        " + signature);
System.out.println("      " + methodName);

}
 
    第五に、事務管理
    ステップ1:Springプロファイルを修正し、以下のコードを追加します.
 
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
     </property>
</bean>
    主にデータベースsession Factoryと関連しています.
 
    第二ステップ:自動事務処理の注釈を追加する
 
<tx:annotation-driven transaction-manager="transactionManager" />
    サービス層でSpring事務管理を必要とするクラスや方法に@Transation注釈を加えることで、データベース処理を行うと自動的にデータベースと一致します.
 
    今日はこれを書きます.また、Spring Aopはまだたくさんの応用があります.みんなで進歩して、いい使い方があって、一緒に進歩してほしいです.