作为一名 Java 开发,对 Spring 框架是再熟悉不过的了。Spring 支持的控制反转(Inversion of Control,缩写为IoC)和面向切面编程(Aspect-oriented programming,缩写为AOP)早已成为我们的开发习惯,仿佛 Java 开发天生就该如此。人总是会忽略习以为常的事物,所有人都熟练使用 IoC 和 AOP,却鲜有人说得清楚到底为什么要用 IoC 和 AOP。
技术肯定是为了解决某个问题而诞生,要弄清楚为什么使用 IoC 和 AOP,就得先弄清楚不用它们会碰到什么问题。
IoC我们现在假设回到了没有 IoC 的时代,用传统的 Servlet 进行开发。
传统开发模式的弊端三层架构是经典的开发模式,我们一般将视图控制、业务逻辑和数据库操作分别抽离出来单独形成一个类,这样各个职责就非常清晰且易于复用和维护。大致代码如下:
@WebServlet("/user") public class UserServlet extends HttpServlet { // 用于执行业务逻辑的对象 private UserService userService = new UserServiceImpl(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // ...省略其他代码 // 执行业务逻辑 userService.doService(); // ...返回页面视图 } } 复制代码 public class UserServiceImpl implements UserService{ // 用于操作数据库的对象 private UserDao userDao = new UserDaoImpl(); @Override public void doService() { // ...省略业务逻辑代码 // 执行数据库操作 userDao.doUpdate(); // ...省略业务逻辑代码 } } 复制代码 public class UserDaoImpl implements UserDao{ @Override public void doUpdate() { // ...省略JDBC代码 } } 复制代码