1、代理类
package wlly.spring.web.beans;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyProxy implements InvocationHandler{
private Object object;
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
proxy=object;
before();
method.invoke(proxy, args);
return null;
}
public void before() {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss sss");
String startTime = sdf.format(dt);
System.out.println("@Before开始" + startTime);
}
public void after() {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss sss");
String startTime = sdf.format(dt);
System.out.println("@After" + startTime);
}
public void afterReturn() {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss sss");
String startTime = sdf.format(dt);
System.out.println("@AfterReturning返回" + startTime);
}
public void afterThrow() {
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss sss");
String startTime = sdf.format(dt);
System.out.println("@AfterThrowing抛出异常" + startTime);
}
}
2、接口
package wlly.spring.web.beans;
public interface UserDAO {
public void add();
}
3、实现类
package wlly.spring.web.beans;
import org.springframework.stereotype.Repository;
@Repository
public class UserDAOImpl implements UserDAO{
public void add() {
System.out.println("添加用户开始......");
}
}
4、beans.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"
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">
<context:component-scan base-package="wlly.spring.web.beans" />
<bean id="myProxy" class="wlly.spring.web.beans.MyProxy"/>
<aop:config>
<aop:pointcut expression="execution(public void wlly.spring.web.beans.UserDAOImpl.add())" id="sos" />
<aop:aspect id="pro" ref="myProxy">
<aop:before method="before" pointcut-ref="sos" />
<aop:after method="after" pointcut-ref="sos"/>
<aop:after-returning method="afterReturn" pointcut-ref="sos"/>
<!-- <aop:around method="afterThrow" pointcut-ref="sos"/> -->
</aop:aspect>
</aop:config>
</beans>
5、测试类
package wlly.spring.web.beans;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("/wlly/spring/web/beans/beans.xml");
UserDAO userDAO=(UserDAO)applicationContext.getBean("userDAOImpl");
userDAO.add();
}
}