Spring简介
▍Spring是什么
- Spring是分层的J2EE轻量级开发框架,提供全栈(full-stack)解决方案,它以IOC(Inverse Of Control,反转控制)和AOP(Aspect Oriented Programming,面向切面编程)为内核。
- 提供了展现层SpringMVC、持久层SpringJDBCTemplate、业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的JavaEE企业应用开源框架
▍Spring发展历程
- Rod Johnson(Spring之父)在2002年对臃肿而低效的JavaEE系统框架提出质疑,2004年其发布的《Expert one-on-one J2EE Development without EJB》用新的设计将其替而代之,并一战成名
- 传统的JavaEE并没有实现“Write Once and Run Anywhere”的承诺,而Johnson的新设计为每一层提供了简洁而强大的解决方案,这种一站式服务即「全栈」
- 2017年9月份发布的Spring的经典版本Spring5.0通用版(GA)成为了当今企业所寻求的目前最优解
其实,Spring和EJB孰优孰劣是个伪命题。EJB是JavaEE传统而严谨的规范,Spring是JavaEE简便而灵活的框架。 Rod Johnson的批判也并不是负面的,而是在学院派的基础上寻求更加优美的设计。
▍Spring的优势
- 方便解耦,简化开发
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交给Spring控制,避免硬编码所造成的过度程序耦合(比如在Service层new
出Dao层对象就是一个典型的耦合)。这样,可以更专注于上层的应用。 - AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,简单来说就是解决OOP不好解决的问题。 - 声明式事务的支持
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来(手动控制begin,commit,rollback),而是通过声明的方式灵活管理。 - 方便程序的测试
在Spring里,测试不再是昂贵的操作,而是随手可做的事情。Spring对Junit支持,可以通过注解方便的测试Spring程序。 - 方便集成各种优秀框架
Spring不但不排斥各种优秀的开源框架,甚至,Spring可以降低各种框架的使用难度。Spring支持Struts、Hibernate、Hessian、Quartz等。 - 降低Java EE API的使用难度
Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装(不用手写Util类啦!),使得Java EE API的使用难度大大降低。 - Java源码是经典学习范例
Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式的灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java学习的必由之路。
Spring快速入门
▍开发步骤
① 导入Spring相关包的Maven坐标
② 编写Dao接口及其实现类
③ 创建并配置xml文件实现id与完整类名class的映射
④ 使用Spring的API获取实例
▍代码实现
① 在pom.xml中引入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
② dao层标准结构
// dao.UserDao
public interface UserDao {
public void sayHi();
}
// dao.impl.UserDaoImpl
public class UserDaoImpl implements UserDao {
public void sayHi() {
System.out.println("Hello!!");
}
}
③ resource下新建一个applicationContext并配置
<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
④ service层使用
public class UserDaoDemo {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao)app.getBean("userDao");
userDao.sayHi();
}
}