为什么使用IOC
参考https://www.cnblogs.com/Leo_wl/archive/2013/03/18/2966983.html
举个例子,比如一段代码需要读入一些电影数据进行筛选等操作,那这段代码实现的功能主体只是进行筛选过滤这样的操作,写在Service层中。
电影数据可以从本地文件中获取,也可以从数据库中读取,需要为这两种方式分别建一个类FileMovie和DatabaseMovie,在Service层获取数据时,按照惯例会写死代码(new FileMovie或new DatabaseMovie),当需求出现变更的时候,则需要修改源代码,这种方式的代码耦合性高,Service层应该更多地关注于业务代码而不需多关注数据来源。
如果定义一个获取数据的接口DataInterface,从本地和从数据库获取数据的类都实现这个接口,Service中获取数据都从这个接口来获取,而具体使用哪个数据源在另外的地方进行调配,这就实现了一个简易的IOC,降低了代码的耦合度。
为什么使用AOP
AOP意为面向切面编程,它可将日志、权限控制等功能单独拿出来作为一个模块,把需要加入日志、权限控制的方法作为切点,使用动态代理的方式进行功能的添加,相比将日志、权限空值功能写在代码结构中,AOP降低了代码的耦合度、提高了代码的复用性。