Spring 我想永远都是主流,应该没有哪一家公司,只要是用 Java 的项目,一定会用到 Spring (如果是自己的框架也会借鉴 Spring 的思想),应该会长时间占据 Web 开发的市场,因为 Spring 的设计思想,它作为一个 Ioc 容器,实现了依赖注入、控制反转。Spring 之所以流行,经久不衰,我想是因为 Spring 这个框架大大地简化了企业级项目的开发,使得会用 Spring 已经成为了 Java 程序员的必备技能,Spring 框架也成为了 JavaEE 事实上的标准。Spring 还扩展出了很多产品,例如 Spring Data、Spring Session、Spring Cache、Spring Boot、Spring Security。
Spring 最最重要的两个概念 IOC 和 AOP。IOC 最最重要,一定要理解什么是依赖注入(控制反转):我需要一个对象不是我 new 出来,而是声明在配置文件中,Spring 容器启动以后,由 Spring 容器提供给我。最典型的 Controller 调用 Service ,Service 调用 Dao,我们通过 @Autowire 注解或者 @Resource 注解以后(而不是 new 一个对象),就可以直接使用,就是 Spring IOC 的功劳,虽然这是一个很简单的事实,我使用了很久以后才明白。
AOP 实现的面向切面编程的思想是非常先进的,它有一种润物细无声的感觉,通过定义切面和切入点表达式,通过动态代理的方式,就可以实现增强逻辑,AOP 应用于日志记录、事务控制、权限控制等方面。
Spring JDBC 我认为有个了解就可以了,如果公司用到的话可以去查询官方文档。Spring 对事务的控制有声明式事务和编程式事务,编程式事务太繁琐,所以不用,声明式事务通过 AOP 实现,太绝对化,一般化,不好控制。我比较认同使用 @Transactional 注解实现事务控制。因为事务控制是一个非常精细的操作,数据库的操作通常是一个软件性能的瓶颈,事务如果控制不好,会影响性能和安全,所以我们说事务的控制很重要,所以我们不能很草率地通过配置切入点表达式一刀切,虽然我们有约定大于配置,但是我们不能保证团队里的其它成员也能很好地遵循我们的约定。所以对于 Spring 事务控制的最佳实践就是使用事物注解方式 @Transactiona 进行精细的事务控制。学习 Spring 的事务的时候还要学习的就是数据的传播行为和隔离级别,这些都可以在 Spring 里面配置。
Spring MVC
Spring MVC 通过一个前端控制器 DispatchServlet ,来实现请求的分发。Spring MVC 里面有一些类是非常重要的,还有一些注解也是非常常用的,用多了我们自然就理解了。
学习 Spring MVC 的时候我们会遇到一个问题,Spring MVC 有提供一个上下文、Spring 也有提供一个上下文,要了解他们之间的关系。而且我们还要避免这两个上下文之间重复扫描了 Bean ,因为重复扫描 Bean 不但会造成资源浪费,还会造成 AOP 失效.
还有好多好多东西没来的及总结 ,期待大家一起分享。