从Spring 到Vue 2 Spring IOC&AOP
- 控制反转 IoC (Inversion of controll)
- 切面编程 AOP Aspect Oriented Programming
IOC
IOC,Inversion of Controll ,控制反转。我一直无法理解这东西到底是什么,为什么起这么一个反人类的名字。
java简单例子介绍IOC和AOP
DI Dependency Inject 依赖注入
依赖注入和控制反转的理解,写的太好了。
DL Dependency Lookup 依赖查找
AOP 切面编程
切面编程的简单意思大概就是,把代码切成3层。中间的夹心层是原先的逻辑代码,前后的饼干层是由AOP方式实现的通用逻辑代码。
静态代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public interface AbcService { public void doing(); }
public class AbcServiceImpl implements AbcService { public void doing() { System.out.println('doing'); } }
public class AbcServiceProxy implments AbcService { private AbcService abcService;
public AbcServiceProxy (AbcService service) { abcService = service; }
@Override public void doing() { System.out.println("doing start") abcService.doing() System.out.println("doing end") } }
|
动态代理
动态代理的实现方式就是通过
Proxy.newProxyInstance方法,将需要代理的类,方法,以及参数传递到对应的 InvocationHandler内,然后在调用方法的前后增加想要的逻辑代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class AbsServiceDynamicProxy {
public static AbcService (AbcServiceImpl serviceImpl) { return new Proxy.newProxyInstance(serviceImpl.class.getClassLoader() ,logger.getClass().getInterfaces() , new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before proxy"); method.invoke(serviceImpl,args); System.out.println("after proxy") return null; } }) } }
|
相关