[Spring]Spring AOP学習ノート(1)

4066 ワード

Spring AOP学習ノート(1)
以前はAOPの概念について少し知っていましたが、あるいは理論的な観点からこの概念を考えただけです.最近Springを勉強しています.実践してみました.
いずれにしても、AOPは、面を向いてプログラミングし、その最大の利点は、業務ロジックをより簡単に明瞭にし、一定の冗長性を減らすことである.
簡単な例では、どのような問題を最適化するためにAOPを見てください.
package com.spring.aop.test1;

public interface jisuan {
	public int add(int i,int j);
	public int mul(int i,int j);
	public int sub(int i,int j);
	public int div(int i,int j);
}
package com.spring.aop.test1;

import org.springframework.stereotype.Component;

@Component(value="sss")
public class jisuanimpl implements jisuan {

	@Override
	public int add(int i, int j) {
		// TODO Auto-generated method stub
		int result = i+j;
		System.out.println(result);
		return result;
	}

	@Override
	public int mul(int i, int j) {
		// TODO Auto-generated method stub
		int result = i*j;
		System.out.println(result);
		return result;
	}

	@Override
	public int sub(int i, int j) {
		// TODO Auto-generated method stub
		int result = i-j;
		System.out.println(result);
		return result;
	}

	@Override
	public int div(int i, int j) {
		// TODO Auto-generated method stub
		int result = i/j;
		System.out.println(result);
		return result;
	}

}
package com.spring.aop.test1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-aop.xml");
		jisuan js = (jisuan) ctx.getBean("sss"); 
		int res=js.add(4, 3);
		js.mul(3,4);
	}
}
Springプロファイルの情報は以下の通りです.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

	<context:component-scan base-package="com.spring.aop.test1"></context:component-scan>

</beans>

現在はビジネスロジックを出していますが、他に追加の内容はありません.しかし、開発者は計算前と計算後に情報を提供する必要があります.
	public int add(int i, int j) {
		// TODO Auto-generated method stub
		System.out.println("add is begin..");//mul,sub,div  ,(1)
		int result = i+j;
		System.out.println(result);
		System.out.println("add is over..");//  (2)
		return result;
	}
上のコードの(1)(2)は修正が必要であれば、多くの修正が必要です.div、mull、subはこのような操作をする必要があるので、このようなコードは2つの問題があります.第二に、ビジネスロジックがはっきりしていません.
これに対してSpring AOPを導入しました.
接麺類を追加します.
package com.spring.aop.test1;

import java.util.Arrays;
import java.util.List;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class testAspect {
	@Before("execution(public int com.spring.aop.test1.jisuan.*(int,int))")
	public void beforeMethod(JoinPoint joinpoint){
		Object name = joinpoint.getSignature().getName();
		Object[] list = joinpoint.getArgs();
		System.out.println("before.."+name+":"+Arrays.asList(list));
	}
	 //      After, Before  
	@After("execution(public int com.spring.aop.test1.jisuan.*(int,int))")
	public void afterMethod(){
		System.out.println("after..");
	}
	}
設定ファイルに追加:
でいいです.
デバッグ中のError
Springフロント通知エラー:error:
Pointcut is mal formed:Pointcut is not well-formed:….
エラーの原因:
@before(value=")のvalueの値が間違っています.
Spring大神さんのご叱正を歓迎します.