????? 廣州瘋狂軟件學院擁有三大課程體系包括:java課程,android課程,ios課程,瘋狂軟件年終鉅惠,報名java就業班,免費贈送基礎班,名額有限,本月火熱報名中,歡迎有志之士電話或者咨詢。
spring中的AOP是通過Java的動態代理實現的,有關動態代理的詳細解釋參見:
現在就使用Java的動態代理模擬AOP(使用JDK的動態代理)
1.建立實體對象
public class User {
Integer id;
String name;
String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
//setter/getter
}
2.建立接口
public interface UserDao {
public void addUser(User user);
}
3.實現接口
public class UserDaoImpl implements UserDao{
@Override
public void addUser(User user){
System.out.println("保存User到數據庫中");
throw new RuntimeException();
}
}
4.創建攔截器(這個類就相當于aop中的切面類)
public class MyInterceptor implements InvocationHandler {
private Object target;
public MyInterceptor() {
}
public MyInterceptor(Object target) {
this.target = target;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
public void before() {
System.out.println("這是一個前置通知");
}
public void afterReturning() {
System.out.println("這是一個后置通知");
}
public void afterThrowing() {
System.out.println("這是一個異常通知");
}
public void after() {
System.out.println("這是一個最終通知");
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnValue = null;
try {
before();
returnValue = method.invoke(target, args);
afterReturning();
} catch (Exception e) {
afterThrowing();
} finally {
after();
}
return returnValue;
}
}
5.通過代理對象實現目標方法
@Test
public void testAOP() {
UserDao userDao = new UserDao();
MyInterceptor interceptor = new MyInterceptor();
interceptor.setTarget(userDao);
//通過代理的靜態方法創建一個代理對象
//這個代理創建的時候,接收了接口類型和攔截器的處理類,在代理的背后,他會調運攔截器的invoke這個
方法。
//因為傳遞的有接口類型,所以可以強制類型轉換到我們指定的接口類型
UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(this.getClass().getClassLoader(),
userDao.getClass().getInterfaces(),
interceptor);
//然后在代理對象處理的時候,就會將我的邏輯織如到被代理的對象上
userDaoProxy.addUser(new User(1, "a", "b"));
}
6.程序輸出
這是一個前置通知
保存User到數據庫中
這是一個異常通知
這是一個最終通知
瘋狂Java培訓專注軟件開發培訓,提升學員就業能力,重點提升實踐動手能力。技術知識沉淀深厚的老師,讓你感受Java的魅力,激發你對于編程的熱愛,讓你在半年的時間內掌握8-10萬的代碼量,掌握Java核心技術,成為真正的技術高手;通過大量全真企業項目瘋狂訓練,迅速積累項目經驗。讓你成為技能型的現代化高端人才,迅速獲得高薪就業!時間不等人,趕緊聯系我們吧!瘋狂java培訓中心地址:廣州天河區車陂灃宏大廈3樓。
瘋狂Java培訓專注軟件開發培訓,提升學員就業能力,重點提升實踐動手能力。瘋狂軟件開設了java課程,ios課程,android課程,為你提供一個學習java技能的好機會,瘋狂軟件特大優惠活動,加瘋狂軟件微信號(瘋狂軟件),搶優惠,優惠100元+贈送iOS教材一本 詳情請看瘋狂java培訓官網。IT從業著仍是社會所需要的高端人才,廣州瘋狂軟件之力于培養企業所需要的中高端IT人才,讓你成為備受企業青睞的人才。
?