Spring下载地址:https://repo.spring.io/ui/native/release/org/springframework/spring/
将下载的zip包解压:
Spring解析
打开libs文件夹,可以看到很多jar包
这些jar包的描述
JAR文件 | 描述 |
---|---|
spring-aop-5.3.9.jar | 这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类 |
spring-aspects-5.3.9.jar | 提供对AspectJ的支持,以便可以方便的将面向切面的功能集成进IDE中 |
spring-beans-5.3.9.jar | 这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion ofControl / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。 |
spring-context-5.3.9.jar | 这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 |
spring-context-indexer-5.3.9.jar | 虽然类路径扫描非常快,但是Spring内部存在大量的类,添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。 |
spring-context-support-5.3.9.jar | 用来提供Spring上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等 |
spring-core-5.3.9.jar | Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 |
spring-expression-5.3.9.jar | Spring表达式语言。 |
spring-instrument-5.3.9.jar | Spring3.0对服务器的代理接口。 |
spring-jcl-5.3.9.jar | Spring的日志模块。JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。 |
spring-jdbc-5.3.9.jar | Spring对JDBC的支持。 |
spring-jms-5.3.9.jar | 这个jar包提供了对JMS 1.0.2/1.1的支持类。JMS是Java消息服务。属于JavaEE规范之一。 |
spring-messaging-5.3.9.jar | 为集成messaging api和消息协议提供支持 |
spring-orm-5.3.9.jar | Spring集成ORM框架的支持,比如集成hibernate,mybatis等。 |
spring-oxm-5.3.9.jar | 为主流O/X Mapping组件提供了统一层抽象和封装,OXM是Object Xml Mapping。对象和XML之间的相互转换。 |
spring-r2dbc-5.3.9.jar | Reactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。这个jar文件是Spring对r2dbc的支持。 |
spring-test-5.3.9.jar | 对Junit等测试框架的简单封装。 |
spring-tx-5.3.9.jar | 为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。 |
spring-web-5.3.9.jar | Spring集成MVC框架的支持,比如集成Struts等。 |
spring-webflux-5.3.9.jar | WebFlux是 Spring5 添加的新模块,用于 web 的开发,功能和 SpringMVC 类似的,Webflux 使用当前一种比较流程响应式编程出现的框架。 |
spring-webmvc-5.3.9.jar | SpringMVC框架的类库 |
spring-websocket-5.3.9.jar | Spring集成WebSocket框架时使用 |
注意:如果采用maven只需要引入context的依赖即可。maven会自动关联其他依赖。
第一步:添加spring context和Junit的依赖,我们使用Spring6的里程碑版,想要设置spring6里程碑版本的仓库,pom.xml配置如下
<!--配置多个仓库-->
<repositories>
<!--spring6里程碑版本的仓库-->
<repository>
<id>repository.spring.milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<dependencies>
<!--spring context依赖,相当于将spring的基础依赖引入了-->
<!--如果想使用spring的其他模块,还需要添加其他依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.0-M2</version>
</dependency>
<!--junit依赖,方便测试程序-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
当加入spring context的依赖之后,会关联引入其他依赖:
spring aop:面向切面编程
spring beans:IoC核心
spring core:spring的核心工具包
spring jcl:spring的日志包
spring expression:spring表达式
第二步:定义bean
/**
* spring可以帮我们管理这个对象
*/
public class User {
}
public class UserDao {
public void insert(){
System.out.println("新增用户");
}
}
第三步:编写Spring的配置文件,该文件放在类的根路径下。
IDEA内置了Spring配置文件模板,用即可
配置文件中进行bean的配置。
这个配置文件的文件名,可以是其他名字,但一定要放在类路径当中。
我们需要在这里配置bean,然后spring会帮我们管理这些对象。
<bean id="userBean" class="com.spring6.bean.User"></bean>
<bean id="userDaoBean" class="com.spring6.dao.UserDao"></bean>
<bean id="dateBean" class="java.util.Date"></bean>
第四步:编写测试程序
步骤:
需要创建ApplicationContext对象,通过ClassPathXmlApplicationContext,传spring配置文件的文件名创建
ApplicationContext:翻译为应用上下文,就是Spring容器
ApplicationContext是一个接口,改接口下有很多的实现类,其中有一个叫ClassPathXmlApplicationContext
ClassPathXmlApplicationContext 专门从类路径当中加载spring配置文件的Spring上下文对象
执行完这行代码,相当于启动了Spring容器,解析spring配置文件,并且实例化所有的bean对象,放到Spring容器当中
@Test
public void testFirstSpring(){
//1.获取Spring容器对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
//2.根据bean的id从Spring容器获取这个对象
Object userBean = applicationContext.getBean("userBean");
System.out.println(userBean);
UserDao userDaoBean = (UserDao) applicationContext.getBean("userDaoBean");
System.out.println(userDaoBean);
userDaoBean.insert();
Object dateBean = applicationContext.getBean("dateBean");
System.out.println(dateBean);
}
第五步:运行程序
1.spring底层怎么创建对象
spring首先会解析spring的xml配置文件,获取到bean标签的class属性的全限定类名,然后通过反射机制调用无参构造方法创建对象
所以想让spring管理对象,需要保证有一个无参数构造方法。
创建的对象会存储的一个Map集合当中
具体是
```java
key存储bean的id value存储bean对象
"userBean" User对象
"userDaoBean" UserDao对象
```
2.spring配置文件的文件名是随意的,自定义,但是要放在类的根路径下
3.在配置文件中配置的类可以使用JDK中的类,但必须有无参构造方法,例如日期类java.util.Date
4.getBean()方法返回的类型是Object,访问子类的特有属性和方法时,还需要向下转型
UserDao userDaoBean = (UserDao) applicationContext.getBean("userDaoBean");
UserDao userDaoBean = applicationContext.getBean("userDaoBean", UserDao.class);
5.ApplicationContext的超级父接口是BeanFactory(翻译为bean工厂,能够生产bean对象的工厂)
BeanFactory是IoC容器的顶级接口,可见Spring底层使用了工厂模式
Spring底层IoC的实现:XML解析 + 工厂模式 + 反射机制