spring AOP 복귀 후 간단 한 예제 알림

6472 단어 springAOP
시작 하기 전에 spring 에 필요 한 jar 가방 가 져 오기;
도입 이 필요 하 다 aspectjweaver. jar 와 이 두 개의 jar 가방
maven 프로젝트 라면 pom. xml 의 dependencies 노드 에 다음 과 같은 인용 을 추가 하면 됩 니 다.
 

 

aspectj
aspectjweaver
1.5.3


cglib
cglib
2.2.2

지금부터 시작:
 
우선, 우 리 는 프로젝트 에 사용 할 간단 한 실체 빈 - User.java
 
package org.xmy.ldq.entity;
import java.io.Serializable;
/**
 *      
 * @author LiDuanqiang
 */
public class User implements Serializable{
	private static final long serialVersionUID = 5752197085695030514L;
	
	private String id;
	private String name;
	private String password;
	private String address;
	
	public User() {}
	public User(String id, String name,String password,String address) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.address = address;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

 
 다음 알림 대상 정의: UserAdvice. java
 
package org.xmy.ldq.aop;

import org.aspectj.lang.JoinPoint;

/**
 *          
 * @author LiDuanqiang
 */
public class UserAdvice {
	/**
	 *                
	 * @param JoinPoint 
	 * @param retValue               
	 * @return
	 */
	public Object afterReturning(JoinPoint joinPoint,Object retValue)throws Throwable{
		Object object = null;
		object = joinPoint.getThis();//      
		/*          */
		String methodName = joinPoint.getSignature().getName();
		if (retValue instanceof Boolean && (Boolean)retValue && methodName.equals("login")) {
			System.out.println("  :"+methodName+"()"+"    ;"+"    !");
		}
		return object;
	}
}

 
 대상 클래스 를 다시 정의 합 니 다: AOPBean. java
 
package org.xmy.ldq;

import org.xmy.ldq.entity.User;


/**
 *   Bean
 * @author LiDuanqiang
 */
public class AOPBean{
	public Boolean login(User user){
		Boolean ret = false;
		/*        ldq     */
		if (user.getName().equals("ldq")&&user.getPassword().equals("ldq")) {
			ret = true;
		}
		return ret;
	}
	
}

 
 마지막 으로 테스트 메 인 프로그램의 구현 클래스 를 정의 합 니 다: App. 자바
 
package org.xmy.ldq;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.xmy.ldq.entity.User;

/**
 *   
 * @author LiDuanqiang
 */
public class App{
	public static void main( String[] args ){
		ClassPathXmlApplicationContext factory =
			new ClassPathXmlApplicationContext("applicationContext.xml");
		AOPBean aopBean = (AOPBean) factory.getBean("aopBean");
		aopBean.login(new User("1","ldq","ldq","cs"));
		System.exit(0);
	}
}

 
 프로필 중요: applicationContext. xml
 
<?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"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<aop:config>
		<!--      -->
		<aop:pointcut id="login_PointcutTarget"  expression="execution(* org.xmy.ldq.AOPBean.login(..))"/>
		<!--      -->
		<aop:aspect id="userAspect" ref="userAdvice">
			<aop:after-returning
			pointcut-ref="login_PointcutTarget"
			arg-names="joinPoint,retValue"
			returning="retValue"
			method="afterReturning"
			/>
		</aop:aspect>
	</aop:config>
	
	<bean id="userAdvice" class="org.xmy.ldq.aop.UserAdvice"></bean>
	<bean id="aopBean" class="org.xmy.ldq.AOPBean"></bean>
	
</beans>





 
 설명: arg - names = "joinPoint, retValue" 대상 방법의 매개 변수 이름;
 
returning="retValue"                       Object;
method="afterReturning"      


 
 
하면, 만약, 만약...
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
aspectjweaver. jar 가방 을 잃 어 버 렸 습 니 다. 도입 하면 됩 니 다.
 Cannot proxy target class because CGLIB 2 is not available. CGLIB to the class path or specify proxy interfaces. 오 류 는 CGLIB 프 록 시 를 사용 하기 때문에 해당 jar 패 키 지 를 도입 해 야 합 니 다.

좋은 웹페이지 즐겨찾기