一、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核心容器管理的对象 |
格式 | <beans> <bean/> <bean></bean> </beans> |
属性列表 | id:bean的id,使用容器可以通过id值获取对应的bean,在一个容器中id值唯一 class:bean类型,即配置的bean的全路径类名 |
范例 |
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoIml"/> <bean id="bookService" class=“com.itheima.service.iml.BookServiceIml”></bean> |
bean别名配置
类别 | 描述 |
名称 | name |
类型 | 属性 |
所属 | bean标签 |
功能 | 定义bean的别名,可定义多个,使用逗号(,)分号(;)空格( )分隔 |
范例 |
<bean id="bookDao" name=“dao bookDaoImpl” class="com.itheima.dao.impl.BookDaoImpl"/> <bean name="service,bookServiceImpl" class="com.itheima.service.impl.BookServiceImpl"/> |
注意事项:
获取bean无论是通过id还是name获取,如果无法获取到,将抛出异常NoSuchBeanDefinitionException
NoSuchBeanDefinitionException:No bean named 'bookServiceImpl' available
bean作用范围配置
类别 | 描述 |
名称 | scope |
类型 | 属性 |
所属 | bean标签 |
功能 | 定义bean的作用范围,可选范围如下 singleton:单例(默认) prototype:非单例 |
范例 | <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype"/> |
为什么bean默认认为单例?
适合交给容器进行管理的bean
■ 表现层对象
■ 业务层对象
■ 数据层对象
■ 工具对象
不适合交给容器进行管理的bean
■ 封装实体的域对象