面向切面 工厂代理模式实现
第一步:功能接口
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();
}
}
测试结果:
在进图前组队
加油
返回城镇后 解散队伍
在进图前组队
换装
返回城镇后 解散队伍
在进图前组队
删除
返回城镇后 解散队伍
浙公网安备 33010602011771号