码迷,mamicode.com
首页 > 其他好文 > 详细

aop实现

时间:2014-11-24 22:17:03      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   使用   sp   java   on   

****

1,使用动态代理实现aop

public interface UserDao {
    void save();
}
public class UserDaoImpl implements UserDao {

    private String name;
    
    public void save() {
        System.out.println("save() is called, name: "+name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    
}

ProxyFactory.java

package com.maple.util;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.maple.dao.UserDao;
import com.maple.dao.impl.UserDaoImpl;

public class ProxyFactory implements InvocationHandler {

    private Object target;
    
    public Object createUserDao(Object target){
        this.target=target;
        return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),
                        this.target.getClass().getInterfaces(), this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        System.out.println(proxy.getClass().getName());
        Object result=null;
        UserDaoImpl userDao=(UserDaoImpl)this.target;
        if(userDao.getName()!=null){
            result=method.invoke(userDao, args);
        }else{
            System.out.println("the name is null");
        }
        return result;
    }

}

测试

@Test
    public void test() {
        ProxyFactory pf=new ProxyFactory();
        UserDaoImpl u=new UserDaoImpl();
        u.setName("maple");
        UserDao userDao=(UserDao) pf.createUserDao(u);
        userDao.save();
    }

输出:

$Proxy5
save() is called, name: maple

****

aop实现

标签:style   blog   io   ar   color   使用   sp   java   on   

原文地址:http://www.cnblogs.com/qingmaple/p/4119689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!