public interface UserDao {<br />public void add();<br />public void delete();<br />}
public class UserDaoImpl implements UserDao {</p><p>@Override<br />public void add() {<br />System.out.println("user add!!!");<br />}</p><p>@Override<br />public void delete() {<br />System.out.println("user delete!!!");<br />}</p><p>}
import java.lang.reflect.InvocationHandler;<br />import java.lang.reflect.Method;</p><p>/**<br /> * 相當於攔截器,可以被代理對象的方法前後加上方法<br /> * */<br />public class UserInterceptor implements InvocationHandler{<br />private Object target;<br />public UserInterceptor(Object target) {<br />this.target = target;<br />}</p><p>@Override<br />public Object invoke(Object proxy, Method method, Object[] args)<br />throws Throwable {</p><p>beforeMethod();</p><p>method.invoke(target, args); //調用被代理對象方法</p><p>afterMethod();</p><p>return null;<br />}</p><p>public void beforeMethod(){<br />System.out.println("beforeMethod()...");<br />}<br />public void afterMethod(){<br />System.out.println("afterMethod()...");<br />System.out.println();<br />}<br />}
import java.lang.reflect.Proxy;</p><p>import com.bjsxt.test.UserDao;<br />import com.bjsxt.test.UserDaoImpl;<br />import com.bjsxt.test.UserInterceptor;</p><p>public class UserServiceTest {</p><p>// 使用JDK 動態代理為每一個方法添加日誌<br />public static void main(String[] args) {<br />UserDao userDao = new UserDaoImpl();<br />UserInterceptor li = new UserInterceptor(userDao);</p><p>// 1.代理對象是根據介面建立出來的<br />// 2.介面有多少方法,代理對象就有多少方法<br />// 3.代理對象調用每一個方法的時候都會把 自身,方法,參數 傳給InvocationHandler<br />UserDao userDAOProxy = (UserDao) Proxy<br />.newProxyInstance(userDao.getClass().getClassLoader(),<br />new Class[] { UserDao.class }, li);</p><p>userDAOProxy.add();<br />userDAOProxy.delete();<br />}</p><p>}