开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
目录
一、IoC入门案例思路分析
1、管理什么?(Service与Dao)
2、如何将被管理的对象告知IoC容器?(配置)
3、被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
4、IoC容器得到后,如何从容器中获取bean?(接口方法)
5、使用Spring导入哪些目标?(pom.xml)
二、IoC容器入门案例
1、导入Spring坐标
<!--1.导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
编辑
2、配置bean
<!--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">
注意: bean定义时id属性在同一个上下文中不能重复
3、获取IoC容器(初始化IoC容器(Spring核心容器/Spring容器)),通过容器获取bean
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App2 {
public static void main(String[] args) {
//3.获取IoC容器
//加载配置文件得到上下文对象,也就是容器对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
4、获取bean(根据bean配置id获取)
//4.获取bean(根据bean配置id获取)
//获取资源
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
执行结果:
三、DI入门案例思路分析
1、基于IoC管理bean
2、Service中使用new形式创建Dao对象是否保留?(否)
3、Service中需要Dao对象如何进入到Service中?(提供方法)
4、Service与Dao间的关系如何描述?(配置)
四、DI入门案例
BookService接口:
public interface BookService {
public void save();
}
BookServiceImpl实现类:
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
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;
}
}
applicationContext.xml代码:
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<!--7.配置server与dao的关系-->
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照哪一个bean-->
<property name="bookDao" ref="bookDao"/>
</bean>
App2:
import com.itheima.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App2 {
public static void main(String[] args) {
//获取IoC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean(根据bean配置id获取)
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
执行结果:
五、bean基础配置
类别 | 描述 |
名称 | bean |
类型 | 标签 |
所属 | beans标签 |
功能 | 定义Spring核心容器管理的对象 |
格式 | **** |
属性列表 | id:bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一class:bean类型,即配置的bean的全路径类名 |
范例 | **** |
bean别名配置
类别 | 描述 |
名称 | name |
类型 | 属性 |
所属 | bean标签 |
功能 | 定义bean的别名,可定义多个,使用逗号(,)分号(;)空格( )分隔 |
范例 | <bean id="bookDao" name=“dao bookDaoImpl” class="com.itheima.dao.impl.BookDaoImpl"/>**** |
注意事项:
获取bean无论是通过id还是name获取,如果无法获取到,将抛出异常NoSuchBeanDefinitionException
NoSuchBeanDefinitionException:No bean named 'bookServiceImpl' available
bean作用范围配置
类别 | 描述 |
名称 | scope |
类型 | 属性 |
所属 | bean标签 |
功能 | 定义bean的作用范围,可选范围如下singleton:单例(默认)prototype:非单例 |
范例 |
为什么bean默认认为单例?
适合交给容器进行管理的bean
■ 表现层对象
■ 业务层对象
■ 数据层对象
■ 工具对象
不适合交给容器进行管理的bean
■ 封装实体的域对象