零、核心
参考视频:黑马程序员SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术
一、核心容器
1. 概念
IoC控制反转:将对象的创建和管理责任从调用者转移到外部框架或容器。简单来说,就是你不再需要自己创建对象,而是让一个“大管家”(
举个通俗的例子,想象一下你去一家餐厅吃饭:
- 传统方式(没有IoC):你走进餐厅,自己点菜,然后自己去厨房找厨师做,最后自己端菜上桌。这个过程中,你不仅需要点菜,还要负责整个烹饪和上菜的过程。
- IoC方式:你走进餐厅,服务员(IoC容器)会帮你点菜,然后厨师(由IoC容器管理的对象)会做菜,最后服务员会把做好的菜端到你面前。在这个过程中,你不需要关心菜是怎么做的,只需要享受美食。
通过IoC,你的代码变得更简洁,因为你不直接创建对象,而是依赖于外部容器来提供这些对象。这样做的好处是:
- 解耦:你的代码与对象的创建和管理解耦,使得代码更灵活,更容易维护和测试。
- 可扩展性:当需要更换或添加新的对象时,你不需要修改现有代码,只需要在IoC容器中进行配置即可。
- 集中管理:所有的对象创建和依赖关系都在一个地方管理,便于集中配置和监控。
DI依赖注入:是实现控制反转(IoC)的一种技术。它是一种设计模式,用于减少代码之间的耦合度,让对象之间的依赖关系更加灵活和可管理。
- 在容器中简历bean与bean之间的依赖关系的整个过程,称为依赖注入
1.0 基础源码
com.getshell -> APP.java
package com.getshell;
import com.getshell.service.BookService;
import com.getshell.service.impl.BookServiceImpl;
public class APP {
public static void main(String[] args) {
BookService bookService = new BookServiceImpl();
bookService.save();
}
}
com.getshell.dao -> BookDao.java
package com.getshell.dao;
public interface BookDao {
void save();
}
com.getshell.dao.impl -> BookDaoImpl.java
package com.getshell.dao.impl;
import com.getshell.dao.BookDao;
public class BookDaoImpl implements BookDao {
@Override
public void save() {
System.out.println("book dao save ...");
}
}
com.getshell.service -> BookSerivce.java
package com.getshell.service;
public interface BookService {
void save();
}
com.getshell.service.impl -> BookServiceImpl.java
package com.getshell.service.impl;
import com.getshell.dao.impl.BookDaoImpl;
import com.getshell.dao.BookDao;
import com.getshell.service.BookService;
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save(){
System.out.println("book service save ...");
bookDao.save();
}
}
1.1 Ioc入门案例
在pom.xml
导入Spring-context依赖包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.2.0</version>
</dependency>
</dependencies>
在resources
中创建Spring配置文件applicationContext.xml
,在文件中配置bean
- bean标签标识配置bean
- id表示给bean起名字
- class属性表述给bean定义类型
<bean id="bookDao" class="com.getshell.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.getshell.service.impl.BookServiceImpl" />
创建APP2
的类,在里面使用bean进行重写
package com.getshell;
import com.getshell.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class APP2 {
public static void main(String[] args) {
//获取Ioc容器
ApplicationContext bookservice = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean
bookservice.getBean("bookService");
//将获取到的东西进行类型转换
BookService bookService = (BookService) bookservice.getBean("bookService");
bookService.save();
}
}
1.2 DI入门案例
重写Service层实现类:删除new关键字,提供对应容器使用赋值的set方法
package com.getshell.service.impl;
import com.getshell.dao.BookDao;
import com.getshell.service.BookService;
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void save(){
System.out.println("book service save ...");
bookDao.save();
}
// 提供对应的set方法
// spring容器往里面传入对象
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
继续修改Spring配置文件 ,配置bean属性中的参数,bookService依赖于bookDao,bookService中的对象属性bookDao
参照 id为bookDao的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 -->
<!-- bean标签标识配置bean-->
<!-- id表示给bean起名字-->
<!-- class属性表述给bean定义类型-->
<bean id="bookDao" class="com.getshell.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.getshell.service.impl.BookServiceImpl" >
<!-- property标签标识配置当前bean的属性 name表示配置哪一个具体的属性 ref属性表示参照哪一个bean -->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
- 最新
- 最热
只看作者