面向切面 工厂代理模式实现

第一步:功能接口

package com.g;

public interface UserService {
    void addUser();
    void update();
    void delete();
}

第二步:实现此接口

package com.g;

public class UserServiceImpl implements UserService{

    @Override
    public void addUser() {
        System.out.println("加油");
    }

    @Override
    public void update() {
        System.out.println("换装");
    }

    @Override
    public void delete() {
        System.out.println("删除");
    }

}

第三步:创建一个切面类

package com.g;

public class MyAspect {

    public void before(){
        System.out.println("在进图前组队");
    }
    public void after(){
        System.out.println("返回城镇后 解散队伍");
    }
}

第四步:创建一个代理工厂类

 

package com.g;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.InvocationHandler;
import org.springframework.cglib.proxy.Proxy;

public class UserFactory {
	
	public static UserService  getProxy(){
			UserService uService = new UserServiceImpl();
	
			MyAspect my = new MyAspect();
			
			UserService us = (UserService) Proxy.newProxyInstance(UserFactory.class.getClassLoader(), uService.getClass().getInterfaces(),
					new InvocationHandler() {
						
						@Override
						public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
							my.before();
							Object o= arg1.invoke(uService, arg2);
							my.after();
							return o;
						}
					} );
			return us;
	}
	
}

  

  最后通过JUnit4来测试

package com.g;

import org.junit.Test;

public class Testg {
	@Test
	public void test(){
           UserService u = UserFa.getProxy(); u.addUser(); u.update(); u.delete(); } }

测试结果:

在进图前组队
加油
返回城镇后 解散队伍
在进图前组队
换装
返回城镇后 解散队伍
在进图前组队
删除
返回城镇后 解散队伍

 

  

 

posted on 2017-03-30 01:31  背后有人  阅读(306)  评论(0)    收藏  举报

导航