Spring: IoC 和 AOP
IoCInversion of Control中文是“控制反转”。AOPAspect-Oriented Programming中文是“面向切面编程”。一、IoC对象交给 Spring 管理IoC 就是控制反转对象不用我们自己new而是由 Spring 容器负责创建和管理。Service public class UserService { }RestController public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService userService; } }Spring 会自动创建UserService并注入到UserController中这个过程叫依赖注入。好处减少类之间的耦合不需要到处手动new对象更换实现类时更方便方便进行单元测试和统一管理对象生命周期二、AOP统一给方法增加功能AOP 是面向切面编程主要把日志、事务、权限校验等公共功能抽离出来在方法执行前后自动执行。Transactional public void createOrder() { // 创建订单 }调用createOrder()时Spring 会自动开启事务成功后提交出现异常时回滚。好处避免在每个方法中重复写相同代码让业务代码更简洁日志、权限、事务等功能可以统一修改降低公共功能和业务代码之间的耦合三、AOP 的实现方式Spring AOP 主要通过动态代理实现目标类实现接口时通常使用 JDK 动态代理目标类没有接口时通常使用 CGLIB 代理好处不需要修改原来的业务类可以在运行期间动态增加功能便于扩展和维护四、IoC 和 AOP 的区别IoC 解决“对象由谁创建和管理”AOP 解决“如何给方法统一增加功能”例如Service public class OrderService { Transactional public void createOrder() { } }OrderService由 Spring 创建是 IoCTransactional自动增加事务是 AOP。IoC 降低对象之间的耦合AOP 减少重复代码两者共同提高程序的可维护性和扩展性。