目录
- 在Spring中有两种依赖注入方式,setter注入和构造器注入,注入的数据又分为简单类型和引用类型
一、setter注入(推荐)
1、简单类型
(1)新建一个Maven项目,在项目中添加BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService和BookServiceImpl类
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("user dao save ...");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService{
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
(2)在BookDaoImpl类中声明对应的简单数据类型的属性,并提供对应的setter方法
public class BookDaoImpl implements BookDao {
private String databaseName;
private int connectionNum;
public void setConnectionNum(int connectionNum) {
this.connectionNum = connectionNum;
}
public void setDatabaseName(String databaseName) {
this.databaseName = databaseName;
}
public void save() {
System.out.println("book dao save ..."+databaseName+","+connectionNum);
}
}
(3)配置文件中进行注入配置
(4)运行App类,结果为
2、引用类型
(1)在bean中定义引用类型属性,并提供可访问的set方法
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
(2)配置中使用property标签和ref属性注入引用类型对象
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
(3)运行App类,结果为
二、构造器注入
1、简单类型
(1)修改BookDaoImpl类,添加构造方法
(2)配置完成多个属性构造器注入
(3) 运行App类,结果为
2、引用类型
(1)在BookServiceImpl类中将bookDao的setter方法删除掉,并添加带有bookDao参数的构造方法
(2)配置文件中进行配置构造方式注入 (3)运行App类,结果为
三、依赖自动装配
- 什么是依赖自动装配?
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
- 自动装配方式有哪些?
按类型(常用)
按名称(了解)
1、环境准备
(1)项目中添加BookDao、BookDaoImpl、BookService和BookServiceImpl类
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
private String databaseName;
private int connectionNum;
public void save() {
System.out.println("book dao save ...");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService{
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
(2)resources下提供spring的配置文件
(3)编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象
2、按类型装配
(1)将<property>标签删除,并在<bean>标签中添加autowire属性
(2)运行App类,结果为
3、按名称装配
将<property>标签删除,并在<bean>标签中添加autowire属性,运行结果相同