pojo+xmlを用いてaopを開発する


  pojo+xml  aop

  xml    spring   .aspectj         ,        .
     xml          ,       ,    ,    ,         。

1.          ,             ,             ,    ,    ,         。   AdviceUtil.java,
package cn.csdn.hr.advice;
import org.aspectj.lang.ProceedingJoinPoint;
//  
public class AdviceUtil {
	//    
	public void getUp() {
		// TODO Auto-generated method stub
		System.out.println("     !");
	}
}
2.          ,   
EmployeeService.java   
package cn.csdn.hr.service;
public interface EmployeeService {
	//   
	public void work();
}

        ,EmployeeServiceBean.java:
package cn.csdn.hr.service;
public class EmployeeServiceBean implements EmployeeService {
	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("    l===================");
	}
}


3. bean.xml    ,     aop,      :
xmlns:aop=http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
  , bean.xml       :
<aop:config></aop:config>  ,    aop              
<aop:pointcut></aop:pointcut>         
<aop:aspect></aop:aspect>        
<aop:before/>         
	<aop:around/>     
<aop:after/>    			
<aop:after-returning />
	<aop:after-throwing />
<aop:declare-parents/>     

                  :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
<!—     bean -->
<bean id="adviceUtil" class="cn.csdn.hr.advice.AdviceUtil"></bean>
<!--     bean -->
<bean id="employeeServiceBean" class="cn.csdn.hr.service.EmployeeServiceBean"></bean>
<!-- aop                  -->
	<aop:config>	
		<!--       -->
		<aop:pointcut expression="execution(* cn.csdn.hr..*.*work(..))" id="myPointcut"/>
		<!--        order     -->
		<aop:aspect ref="adviceUtil">
			<!--              method    -->
			<aop:before method="getUp" pointcut-ref="myPointcut"/>
		</aop:aspect>
	</aop:config>
</beans>

                 , AdviceUtil.java      :
//    
	public void goHome() {
		System.out.println("   !=================");
	}
 bean.xml        :
<!--      -->
<aop:after method="goHome" pointcut-ref="myPointcut"/>

     :
//    
	public Object punchCard(ProceedingJoinPoint jp) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("   ============!");
		Object obj = jp.proceed();
		System.out.println("   ============!");
		return obj;
	}

 AdviceUtil.java     :
<!--     -->
<aop:around method="punchCard" pointcut-ref="myPointcut"/>

               :
	//           after-returning
	public void back(Object ret){
		System.out.println("  back  ================="+ret);
	}
	
	//      
	public void unwell(Exception ex){
		System.out.println("   ====================="+ex.getMessage());
	}
 bean.xml     :
<aop:after-returning method="back" pointcut-ref="myPointcut" returning="ret"/>
	<aop:after-throwing method="unwell" pointcut-ref="myPointcut" throwing="ex"/>

         :
 AdviceUtil.java       :

	//         
	public void checkLogin(String name, String pass) {
		System.out.println("        :" + name + ",   :" + pass);
	}

 bean.xml     :
<aop:pointcut expression="execution(* cn.csdn.hr..*.*work(..)) and args(name,pass)" id="myPointcut1"/>
<!--          -->
<aop:before method="checkLogin" pointcut-ref="myPointcut1"/>
     service                , EmployeeService.java       :
public void work(String uname,String upass);

 EmployeeServiceBean.java       :
@Override
	public void work(String uname, String upass) {
		// TODO Auto-generated method stub
	System.out.println(uname+"============="+upass+"==============");
	}

  ,             。



    
              ,    Auditable.java       :
package cn.csdn.hr.advice;
import java.util.Date;
public interface Auditable {
	//                           
	//    :           
	void setLastModifiedDate(Date lastModifiefDate);
	Date getLastModifiedDate();
}

 AuditableAdvice.java    :
package cn.csdn.hr.advice;
import java.util.Date;
import org.springframework.aop.support.DelegatingIntroductionInterceptor;

/*
 *     ,  DelegatingIntroductionInterceptor  ,        
 */
@SuppressWarnings("serial")
public class AuditableAdvice extends DelegatingIntroductionInterceptor implements
		Auditable {

	private Date lastModifiedDate;
	
	//DefaultIntroductionAdvisor

	@Override
	public void setLastModifiedDate(Date lastModifiefDate) {
		// TODO Auto-generated method stub
		this.lastModifiedDate = lastModifiefDate;
	}
	@Override
	public Date getLastModifiedDate() {
		// TODO Auto-generated method stub
		System.out.println("          :"+lastModifiedDate);
		return lastModifiedDate;
	}
}

 AdviceUtil.java        ,                  , bean.xml     :
<aop:declare-parents types-matching="*..EmployeeServiceBean" implement-interface="cn.csdn.hr.advice.Auditable" default-impl="cn.csdn.hr.advice.AuditableAdvice"/>

      :
package cn.csdn.hr.junit;
import java.util.Date;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.csdn.hr.advice.Auditable;
import cn.csdn.hr.service.EmployeeService;
public class AppMain {
	@Test
	public void test() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");

		EmployeeService employeeService = (EmployeeService) ac
				.getBean("employeeServiceBean");

		employeeService.work();

		employeeService.work("  ", "222");
		
		Auditable auditable = (Auditable) employeeService;
		auditable.setLastModifiedDate(new Date());
		System.out.println(auditable.getLastModifiedDate());
	}
}

        :
      !
   ============!
    l===================
   ============!
   !=================
  back  =================null
      !
        :  ,   :222
   ============!
  =============222==============
   ============!
   !=================
  back  =================null
          :Thu Apr 19 09:15:49 GMT 2012
Thu Apr 19 09:15:49 GMT 2012