Skip to content

Spring的起源于J2EE密不可分,了解他们出现的历史,可以帮助我们更好的掌握Spring技术。

Java EE

什么是J2EE

**❓**问题1:什么是JAVA EE,他和JAVA语言本身,JAVA SE有什么关系呢?

  1. Java SE(Java Standard Edition)
  2. Java EE(Java Enterprise Edition)

❓****

java EE的起源

由于企业级应用需要处理的东西太多,包括网络、安全、数据库等等,1999年,SUN公司提出了一个想法:**容器****组件****的形式来提供服务,**容器负责共性的、底层的、复杂的内容,也为组件的运行提供环境,而组件负责具体的业务层面的内容。为了形成一个良好的JAVA开发生态,SUN公司还定义了一系列的规范,指定容器应该怎么做,组件应该怎么做。

容器是面向软件厂商,我们熟知的像tomcat就实现了J2EE容器规范,相应的还有jetty等等,而我们编写的程序,只要符合组件的规范,就可以跑在不同的容器上,这为程序的移植带来了极大的便利。

读一读这篇文章:IoC原理,介绍了为什么要使用IOC容器


****````

EJB容器与WEB容器有很多相同的地方,2002年10月份,Rod Johnson写了一本书《expert one to one J2EE Development without EJB》,基本思想是只使用Web容器而不使用EJB容器,并开发了一款在线订做应用,在这本书中,他使用了大量面向对象方法,实现了一个底层框架,在这个框架中第一次出现了依赖注入和AOP,这也是的起源(依赖注入和AOP与面向对象是息息相关的)。

  • <font style="color:rgb(32, 35, 39);">Java EE</font>

很多教程讲解Spring的时候,都会直接介绍Spring的两大核心IOC和AOP。作为初学者,看到这些概念都会一头雾水,学了半天也只知道了一些概念,似懂非懂。了解Spring的发展和Spring的设计理念对于我们掌握Spring是非常有帮助的。

Spring最早是由Rod Johnson在他的**《Expert One-on-One J2EE Development without EJB》**一书中提出的用来取代EJB的轻量级框架。**<font style="color:rgb(51, 51, 51);">Spring Framework</font>**

java
public class BookService {
    private HikariConfig config = new HikariConfig();
    private DataSource dataSource = new HikariDataSource(config);

    public Book getBook(long bookId) {
        try (Connection conn = dataSource.getConnection()) {
            ...
            return book;
        }
    }
}
````````
java
public class UserService {
    private HikariConfig config = new HikariConfig();
    private DataSource dataSource = new HikariDataSource(config);

    public User getUser(long userId) {
        try (Connection conn = dataSource.getConnection()) {
            ...
            return user;
        }
    }
}
````
java
public class CartServlet extends HttpServlet {
    private BookService bookService = new BookService();
    private UserService userService = new UserService();

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        long currentUserId = getFromCookie(req);
        User currentUser = userService.getUser(currentUserId);
        Book book = bookService.getBook(req.getParameter("bookId"));
        cartService.addToCart(currentUser, book);
        ...
    }
}

****

Spring的生态