Spring
1.Spring Framework系统架构
-
Core Container:核心容器
-
Data Access:数据访问
-
Data Integration:数据集成
-
Web:Web开发
-
AOP:面向切面编程
-
Aspects:AOP思想
-
Test:单元测试与集成测试
2.核心概念
-
IOC(Inversion of Control)控制反转
对象的创建控制权由程序转移到外部
-
Spring技术对IoC思想进行了实现
Spring提供了一个容器,称为Ioc容器 来充当IoC思想中的外部
IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在Ioc容器中被称为Bean
-
DI(Dependency Injection)依赖注入
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
-
目标:充分解耦
使用IoC容器管理bean(IoC)
在IoC容器内将有依赖关系的bean进行关系绑定(DI)
-
最终效果
使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有依赖关系
3.IoC入门
-
导入Spring坐标
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency>
-
定义Spring管理的类(接口)
public interface BookService { public void save(); }
public class BookServiceImpl implements BookService { private BookDao bookDao = new BookDaoImpl(); public void sabe() { bookDao.save() } }
-
创建Spring配置文件,配置对应类作为Spring管理的bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 1.导入spring的坐标spring-content,对应版本5.2.8.RELEASE--> <!-- 2.配置bean--> <!-- bean标签表示配置bean--> <!-- id属性表示给bean起名字--> <!-- class属性表示给bean定义类型--> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"/> </beans>
-
初始化Ioc容器,通过容器获取bean
public class App { public static void main(String[] args) { //3.获取IoC容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //4.获取bean BookDao bookDao = (BookDao) ctx.getBean("bookDao"); bookDao.save(); //5.获取bean BookService bookService = (BookService) ctx.getBean("bookService"); bookService.save(); } }
4.DI入门
-
删除使用new 的形式创建对象的代码
public class BookServiceImpl implements BookService{ //5.删除业务层中使用new的方式创建的dao对象 private BookDao bookDao; public void save() { System.out.println("book service save ..."); bookDao.save(); } //6.提供对应的set方法 public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } }
-
配置service与dao之前的关系
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <!-- 7.配置service与dao的关系--> <!-- property标签表示配置当前bean的属性--> <!-- name属性表示配置哪一个具体的属性--> <!-- ref属性表示参照哪一个bean--> <property name="bookDao" ref="bookDao"/> </bean> //ref的"bookDao"指的是当前容器bean的id