#工厂类
把实现接口的类扔进代理中,代理去增加扩展功能,这样就实现了切面编程。好处是没有继承,也就是说没有依赖关系,降低了耦合度,从而达到解耦的目的
public class MyBeanFactory{
public static IUserService createUserService(){
final IUserService userService = new UserServiceImpl();
final MyAspect aspect = new MyAspect;
IUserService proxyService = (IUserService)Proxy.newProxyInstance(
MyBeanFactory.class.getClassLoader, //类加载器
userService.getClass().getInterface(), //期望哪个对象的接口被拦截
new InvocationHandler(){
@Override
public Object invoke(Object proxy,Method method,Objectp[] args)
throws Throwable{
aspect.before();
Object retObj = method.invoke(userService,args);//利用反射
aspect.after();
return retObj; //应该是业务方法的返回值
}
}
)
}
return proxyService;
}