DAY04-Sping01
一、Spring介绍
- Spring 是一个轻量级的 IoC 、 DI和 AOP 容器的开源框架
- Spring是一个能帮你创建对象,设置对象属性的,可存放这些对象的容器框架
Spring在JavaEE开发中作用
image.pngSpring优势
- Spring 除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发。
Spring 能帮我们低侵入/低耦合地根据配置文件创建及组装对象之间的依赖关系。
Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制等。
Spring 能非常简单的且强大的声明式事务管理。
Spring 提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,且自己也提供了一套 JDBC 模板来方便数据库访问。
Spring 提供与第三方 Web(如 Struts1/2、JSF)框架无缝集成,且自己也提供了一套 Spring MVC 框架,来方便 Web 层搭建。
Spring 能方便的与如 Java Mail、任务调度、缓存框架等技术整合,降低开发难度。
二、 IoC和DI思想
IoC :Inversion of Control(控制反转)
不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 IoC 容器来管理。(不需要自己手动创建对象,设置对象属性值)
IoCDI:Dependency Injection:依赖注入
image.png指IoC容器创建对象的过程中,将对象依赖属性(常量,对象)通过配置设值给该对象。
其类必须提供对应 setter 方法
-
注入常量:<property name="对象属性名称" value="需要注入的值"/>
image.png
Spring帮我们做类型转换,但前提是能转换,不能会报错的。
-
注入bean:<property name="对象属性名称" ref="容器另外一个bean的id值" />
image.png
三、 使用Spring IoC
- 添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
- 根据需求编写类
- 通过配置告诉Spring来管理对象
<!--
配置数据库连接池对象才配置初始化与销毁化方法
若发现类名是以FactoryBean 结尾,注意创建对象类型
属性名必须对应是 setter 方法
-->
<bean id="唯一性" class="类全限定名" [init-method="初始方法" destroy-method="销毁方法" scope="作用域,singleton:单例 (缺省),prototype:多例"] >
<property name="属性名" value="属性值" | ref="容器中另外一个bean的 id 值">
........
</bean>
底层利用全限定名进行反射创建对象,利用内省机制给属性赋值
- 启动容器获取对象
使用Spring测试启动容器
- 添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.8.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
-
贴注解
@RunWith(SpringJUnit4ClassRunner.class) //在测试方法之前启动容器
@ContextConfiguration(" classpath:Spring配置文件") //指定加载的配置文件
@Autowired //贴字段上字段类型就是从容器中获取的对象的类型
@ContextConfiguration,则去测试类的路径找测试类名-context.xml 配置文件,如:PersonTest-context.xml。(路径需相同)
image.png