1.Spring入门
1-1.Spring背景
作用:
Spring框架的目的就是为了简化JavaEE- [JavaSE,JavEE- [Enterprise Edition],JavaME]的企业级应用开发。
重量级框架 - EJB --[与底层硬件,系统,关联性很大]
轻量级框架 - Spring [不依赖于底层系统平台,可移植性强]
Rod Johnson -- Spring Framework创始人
2004年3月24日,发布了1.0正式版
Spring框架发展历程:
-
第一个阶段: XML配置阶段 Sprint 1.x
-
第二个阶段: 注解配置阶段 Spring 2.x
-
第三个阶段: Java配置 Spring 3.x以上
基于SSM项目 – 使用XML与注解配置结合:
-
基本配置(数据源,mybatis,事务等)用XML
-
业务配置(@Service,@Controller…)用注解
针对Spring4.x以上和Spring Boot都推荐使用Java配置
-
1-2.Spring的优点
Spring定义
是分层的 Java SE/EE 应用 full-stack 轻量级开源框架(不依赖平台,代码量小)
以 IoC(Inverse Of Control:控制反转)和 AOP(Aspect Oriented Programming:面向切面编程)为内核
Spring的内部针对于分层应用中的表示层–SpringMVC[模块]、数据访问层–SpringJDBC[模块]、AOP[实现事务管理]
Spring- Struts-Hibernate [SSH]
Spring-SpringMVC-Mybatis [SSM]
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。
可以说Spring是企业应用开发的“一站式”(one-stopshop)选择,并贯穿表现层、业务层及持久层
-表现层:SpringMVC
—业务层:AOP事务管理
—持久层:springjdbc
Spring优点
- 方便解耦,简化开发
- AOP编程的支持
- 声明式事务的支持 --业务层 xml
- 方便程序的测试
- 方便集成各种优秀的框架
- Java 源码是经典学习范例 – Spring源码[开源]
1-3.Spring体系结构
1-3.Spring体系结构
![image-20210427144343799](https://i-blog.csdnimg.cn/blog_migrate/3c669f76a455566876a163539519b70f.png)
1-4.Spring工厂类结构
Spring容器顶层接口与三个实现类
BeanFactory接口
- ApplicationContext接口
- ClassPathXMLApplicationContext 实现类 – 基于XML配置文件生成的工厂实现类
- -FileSystemXmlApplicationContext 实现类 – 基于XML配置文件生成的工厂实现类
- -AnnotationConfigApplicationContext --基于注解配置的工厂实现类
- ClassPathXMLApplicationContext 实现类 – 基于XML配置文件生成的工厂实现类
1-7.BeanFactory与ApplicationContext区别 [理解]
-
BeanFactory是Spring容器的顶层接口, ApplicationContext继承于它
-
BeanFactory与ApplicationContext 工厂 创建对象的时间点不一样
- ApplicationContext:只要一读取配置文件,默认情况下就会创建对象,并保存Spring容器中
- BeanFactory:什么时候使用什么时候创建对象
日志logback依赖添加进来,可以看出区别:
public class UserServiceTest {
@Test
public void testSaveUser(){
User user = new User();
//UserService userService= new UserServiceImpl();
//根据Spring核心配置文件,创建Spring容器对象ac
//ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanFactory ac = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
System.out.println("=====================================================================");
UserService userService = (UserService) ac.getBean("userService");
UserService userService2 = (UserService) ac.getBean("userService");
System.out.println(userService2==userService);
userService.saveUser(user);
}
}