Spring入门
一 Spring Framework
1 IOC、DI、Bean
1.1 IOC和Bean
IOC控制反转
- 对象的创建控制权由程序转移到外部,这种思想称为控制反转(IOC)
Spring技术对IOC思想进行了实现
- spring提供了一个容器,称为IOC容器,用来充当IOC思想中的“外部”
- IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中称为Bean
1.2 DI
DI 依赖注入
- 在容器中简历bean与bean之间的依赖关系的整个过程,称为依赖注入
2 IOC入门案例
思路
- 管理什么(Service和Dao)
- 如何将被管理的对象告知IOC容器(配置)
- 被管理的对象交给IOC容器,如何获取到IOC容器(接口)
- IOC容器得到后,如何从容器中获取bean(接口方法)
- 使用spring导入哪些坐标(pom.xml)
- 按照项目结构创建文件夹,并且完善文件内容
完善dao层
public interface BookDao { public void test(); }
public class BookDaoImpl implements BookDao { @Override public void test() { System.out.println("BookDao is running..."); } }
完善service层
public interface BookService { public void test(); }
public class BookServiceImpl implements BookService { private BookDao bookDao=new BookDaoImpl(); @Override public void test() { System.out.println("BookService is running..."); bookDao.test(); } }
导入spring的坐标spring-context
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.22</version> </dependency>
配置bean
bean标签表示配置bean,id属性表示给bean起名字,class属性表示给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"> <bean id="BookDao" class="com.demo.dao.impl.BookDaoImpl"></bean> <bean id="BookService" class="com.demo.service.impl.BookServiceImpl"></bean> </beans>
拿容器,拿bean
import com.demo.dao.BookDao; import com.demo.service.BookService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App2 { public static void main(String[] args) { // 获取IOC容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取bean BookDao bookDao = (BookDao) applicationContext.getBean("BookDao"); bookDao.test(); System.out.println("----------------"); BookService bookService = (BookService) applicationContext.getBean("BookService"); bookService.test(); } }
运行App2
3 DI入门案例
思路分析
- 基于IOC管理bean
- Service中使用new形式创建的Dao对象不保留
- Service中需要的Dao对象如何进入到Service中?(提供方法)
- Service与Dao间的关系如何描述(配置)
删除业务层中使用new的方式创建到对象,并提供对应的set方法
import com.demo.dao.BookDao; import com.demo.service.BookService; public class BookServiceImpl implements BookService { //删除业务层中使用new的方式创建到对象 private BookDao bookDao; @Override public void test() { System.out.println("BookService is running..."); bookDao.test(); } //提供对应的set方法 public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } }
配置applicationContext.xml
property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照哪一个bean
下面例子中,第一个bookDao为BookServiceImpl中声明的bookDao,第二个为applicationContext中的BookDao
<?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 id="BookDao" class="com.demo.dao.impl.BookDaoImpl"></bean> <bean id="BookService" class="com.demo.service.impl.BookServiceImpl"> <property name="bookDao" ref="BookDao"></property> </bean> </beans>
App2不用改变,运行App2