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