由于常见的业务都须要加上一些公共的业务,Spring把公共业务称为关注点,关注点常见的有日志,安全,权限,缓存,事物等。由于公共业务会常常使用,因此就提取出来,放在一个公共的方法里面。代码就能够复用了。可是公共业务可能会实现比较复杂的操做,并且整个程序均可能会调用公共业务,因此就能够把公共业务提出变成一个类,经过类来调用公共业务。可是经过类来调用代码,也会须要一行去调用的代码。好比A.log()。这一行代码自己和业务是没有关系的。这一行代码就会使得业务不是很纯粹,设计模式中也提过单一职责原则,那这个类除了处理自己的业务之外,还有添加公共业务的做用。并且也产生了依赖关系。spring
虽然把公共业务提出来做为一个单独的类,可让业务更加纯粹,而后在增长一个代理类,添加公共业就在代练类里面添加会很方便。但是若是业务多了,每一个业务都有可能添加公共业务,那么每一个业务都须要一个代理类,就会形成类过多。而动态代理就是为了解决这个问题出现的。动态代理能够代理全部的类。动态代理经过proxy生产代理实理。而后经过代理实例去调用真实对象的时候,会调用代理实例的invoke方法去创建真实对象和代理实例的联系。编程
如今软件开发已经分得很清楚了,不一样的领域设计的业务都不同,可是同一个领域都会有一些共同的业务。咱们把这部分共同的业务抽出来,就成了领域模型。好比在支付领域。不管是支付宝,或者微信,或者其余支付方式。它的过程基本都是固定的:
接入第三方接口——安全验证——身份验证——余额验证——支付。
这个过程就能够抽出来,就是一个领域业务了。设计模式
aop的做用就是在不改变原有代码的基础上,新添加功能,像是横切进去同样,因此叫面向切面编程。aop实际上也是经过动态代理来实现的。spring提供了一个动态代理的框架,使得编写代码更方便。缓存