一: 学习Spring框架的原因
1.简化开发
2.可以整合其他技术(框架)
二: Spring的核心概念
1. IOC(Inversion of Control) 控制反转, 即将new对象的权利由程序转到外部(Spring的IOC容器)
Plus:Spring提供了一个容器,称为IOC容器,IOC容器负责对象的创建、初始化等一系列 工作,被创建或被管理的对象在IOC容器中统称为Bean
2. DI(Dependency injection) 依赖注入, 即在IOC容器中建立Bean与Bean之间的依赖关系
三:IOC入门案例(创建Maven项目后使用Spring构建项目)
实现步骤:
1.在pom.xml文件中导入Spring坐标
<dependencies>
<!--导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
2.编写要交给Spring管理的类(不是固定格式,根据具体业务来定)
Eg: 编写xxxService,xxxDao的接口以及他们各自的实现类xxxServiceImpl,xxxDaoImpl
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("BookDaoImpl运行了save方法");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService {
private BookDao bookDao= new BookDaoImpl();
public void save() {
System.out.println("BookServiceImpl执行了save方法");
bookDao.save();
}
3. 在Maven项目Resources文件夹下创建Spring的配置文件applicationContext.xml, 并且配置对应的类作为Spring管理的Bean
(注意:导过Spring坐标刷新Maven后才会出现这个配置文件)
<?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">
<!--
bean标签:表示配置bean
id属性:表示给bean起名字
class属性:表示给bean定义类型
-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"/>
</beans>
4.初始化IOC容器,通过容器获取Bean对象
public class App {
public static void main(String[] args) {
//1.创建IoC容器对象,加载spring核心配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 从IOC容器中获取Bean对象(BookService对象)
BookService bookService= (BookService)ctx.getBean("bookService");
//3 调用Bean对象(BookService对象)的方法
bookService.save();
}
}
注意看这个案例我们是通过IOC容器(AppliacationContext)来创建BookService对象而不是通 过我们主动new的方式来创建对象的,这个思想就是叫做IOC(Inversion of Control 控制反转)
四:DI入门案例(创建Maven项目后使用Spring构建项目)
对上述的案例进行DI优化,主要是建立起bookService与bookDao之间的关系
实现步骤:
1.删除使用new的形式创建对象的代码
public class BookServiceImpl implements BookService {
//private BookDao bookDao= new BookDaoImpl();
//删除原先使用new的方式创建的bookDao对象
private BookDao bookDao;
public void save() {
System.out.println("BookServiceImpl执行了save方法");
bookDao.save();
}
}
2.提供依赖对象对应的setter方法
public class BookServiceImpl implements BookService {
//private BookDao bookDao= new BookDaoImpl();
//删除原先使用new的方式创建的bookDao对象
private BookDao bookDao;
public void save() {
System.out.println("BookServiceImpl执行了save方法");
bookDao.save();
}
//提供对应的set方法
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
3.配置service与dao之间的关系
在applicationContext.xml中配置
<?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">
<!-- 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"/>--><!--
在service这个bean中配置与Dao的关系-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--property标签表示配置当前bean的属性
name属性表示配置的一个具体的属性
ref属性表示参照哪一个bean-->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
注意:配置文件中的三个bookDao有着不同的对应关系,ref后面的bookDao对应IOC容器中id叫做bookDao的Bean对象,name属性后面的bookDao对应BookServiceImpl中的属性bookDao
好啦Spring入门就说到这里啦,用SprigBoot也可以演示IOC和DI思想,具体参见其他博文~