🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 ![](https://box.kancloud.cn/d74d20d54f32194ee03effdee9bc468b_750x454.png) 1. core container a) beans与core 它们提供spring框架最基本功能,包含ioc与di b) context 上下文对象,基于beans与cores c) spel它是sprng提供的一个表达式语言 2. Data access/integration a) 数据访问 b) 集成 3. Web a) Spring本身提供spring mvc b) 也可以与其它的web层进行集成 4. AOP AOP大部分情况下是使用动态代理来实现的。 5. Test 使用spring可以方便的进行测试 # IOC Inverse of control反转控制 将我们创建对象的方式反转了 以前对象的创建是由我们开发人员自己维护.包括依赖关系也是自己注入 使用了spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入 反转控制就是反转了对象的创建方式,从我们创建反转给了程序(spring) # DI Dependency Injection依赖注入 实现IOC思想需要DI做支持 注入方式: * set方式注入 * 构造方法注入 * 字段注入 注入类型: * 值类型注入(8大基本数据类型) * 引用类型注入(将依赖对象注入) # ApplicationContext和BeanFactory 在spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化,只有在容器实例化后,才可以从IOC容器里获取Bean实例并使用 spring提供了两种类型的IOC容器实现 * BeanFactory:IOC容器的基本实现 * ApplicationContext:提供了更多的高级特性,是BeanFactory的子接口 * BeanFactory是Spring框架的基础设施,面向spring本身 ApplicationContext:提供了更多的高级特性,是BeanFactory的子接口 * BeanFactory是spring框架的基础设施,面向spring本身 ApplicationContext面向使用spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory * 无论使用哪种,配置文件都是相同的 # ApplicationContext的主要实现类 ApplicationContext的主要实现类: - classPathXmlApplicationContext:从类路径下加载配置文件 - FileSystemXmlApplicationContext:从文件系统中加载配置文件,全路径 - AnnotationConfigApplicationContext: 它是用于读取注解创建容器的 ConfigurableApplicationContext扩展于ApplicationContext,新增加两个主要方法refresh()和close(),让ApplicationContext具有启动,刷新和关闭上下文的能力 ApplicationContext在初始化上下文时就实例化所有单例的Bean WebApplicationContext是专门为web应用准备的,他允许从相对应web根目录的路径中完成初始化工作 # 例子 ## 创建对象 ~~~ package studySpring; public class User { public User() { System.out.println("User对象空参构造方法!!!!"); } private String name; private Integer age; private Car car; public User(String name, Car car) { System.out.println("User(String name, Car car)!!"); this.name = name; this.car = car; } public User(Car car, String name) { System.out.println("User(Car car,String name)!!"); this.name = name; this.car = car; } public User(Integer name, Car car) { System.out.println("User(Integer name, Car car)!!"); this.name = name + ""; this.car = car; } public Car getCar() { return car; } //setter/getter public void init() { System.out.println("我是初始化方法!"); } public void destory() { System.out.println("我是销毁方法!"); } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", car=" + car + "]"; } } ~~~ ~~~ package studySpring; public class Car { private String name; private String color; //getter/setter @Override public String toString() { return "Car [name=" + name + ", color=" + color + "]"; } } ~~~ ## 测试 在applicationContext.xml中写 ~~~ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!-- 将User对象交给spring容器管理 --> <!-- Bean元素:使用该元素描述需要spring容器管理的对象 class属性:被管理对象的完整类名. name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象. 可以重复.可以使用特殊字符. id属性: 与name属性一模一样. 可以指定多个名字,名字之间用逗号,分号,或空格分割 名称不可重复.不能使用特殊字符. 结论: 尽量使用name属性. --> <bean name="user" class="studySpring.User" ></bean> <!-- 导入其他spring配置文件 --> <import resource="studySpring/applicationContext.xml"/> </beans> ~~~ 然后写个类测试下 ~~~ package hello; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import bean.User; public class Demo { @Test public void fun1() { // 1.创建容器对象,因为直接在src下,就写applicationContext.xml ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2.向容器要User对象 User u = (User) ac.getBean("user"); // 打印User对象 System.out.println(u); } } ~~~ ApplicationContext它是BeanFactory的一个子接口,我们在使用时使用的是AppliCationContext的实现类ClassPathXmlApplicationContext # 配置文件 ## 配置文件约束 ~~~ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //上面两个是基础IOC的约束,必备 xmlns:context="http://www.springframework.org/schema/context" //上面一个是开启注解管理Bean对象的约束 xmlns:aop="http://www.springframework.org/schema/aop" //aop的注解约束 xmlns:tx="http://www.springframework.org/schema/tx" //事务的约束 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd //上面两个是基础IOC的约束,必备 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd //上面一个是开启注解管理Bean对象的约束 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd //aop的注解约束 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> //事务的约束 </beans> ~~~ ![](https://img.kancloud.cn/8c/91/8c9168624d96b7a432ad4b3cdeab679b_961x309.png) # maven ~~~ <dependencies> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.10.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <!-- JUNIT DEPENDENCY FOR TESTING --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring 面向切面的编程 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> <!-- 文件上传依赖的jar --> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> <!-- Sring前台传入的json和参数绑定 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> </dependencies> ~~~ ~~~ <properties> <spring.version>5.1.2.RELEASE</spring.version> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> </properties> ~~~