目录
步骤一:项目中添加BookDao、BookDaoImpl、BookService和BookServiceImpl类
步骤三:编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象
步骤一:项目中添加添加BookDao、BookDaoImpl类(记得提供setter方法)
步骤二:resources下提供spring的配置文件,applicationContext.xml
步骤三:编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象
前言
在上一章,我们学习了setter注入和构造器注入,详细可以见前一章第五章 spring框架-CSDN博客
6.1自动配置
6.1.1 什么是依赖自动装配?
IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程成为自动转配
6.1.2自动装配的方法
1,按类型(常用)
2,按名称
3,按构造方法
4,不启动自动装配
6.1.3环境搭配
1,创建一个maven项目
2,pom.xml添加依赖
3,resources下添加spring的配置文件
这些不重要和前面一致,可以快速拷贝,最终结构如下:
步骤一:项目中添加BookDao、BookDaoImpl、BookService和BookServiceImpl类
BookDao:
public interface BookDao {
public void save();
}
BookDaoImpl:
public class BookDaoImpl implements BookDao {
private String databaseName;
private int connectionNum;
public void save() {
System.out.println("BookDao save...");
}
}
BookService:
public interface BookService {
public void save();
}
BookServiceImpl:
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();
}
}
步骤二:resources下提供spring的配置文件
<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.hw.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
步骤三:编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象
public class App {
public static void main( String[] args ) {
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = (BookService)context.getBean("bookService");
bookService.save();
}
}
6.14 完成自动装配的配置
自动装配只需要修改applicationContext.xml配置文件即可:
(1)将将<property>标签删除
(2)在<bean>标签中添加autowire属性
1,实现按照类型注入的配置
<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.hw.service.impl.BookServiceImpl" autowire="byType">
</bean>
注意事项:
1,需要注入属性的类中对应属性的setter方法不能省略
2,被注入的对象必须要被Spring的IOC容器管理
3,按照类型在Spring的IOC容器中如果找到多个对象,会报NoUniqueBeanDefinitionException
一个类型在IOC中有多个对象,还想要注入成功,这个时候就需要按照名称注入,配置方式为:
<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.hw.service.impl.BookServiceImpl" autowire="byName">
</bean>
注意事项:
1,bookDao是private修饰的,外部类无法直接访问
2,外部类只能通过属性的set放啊进行访问
3,对外部类来说,setBookDao方法名,去掉set后首字母小写是其属性名
4,所以按照名称注入,其实是和对应的set方法有关,但是如果按照标准起名称,属性名和set对应的名是一致的
最后对于依赖注入,需要注意一些其他的配置特征:
4,自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
6.2集合注入
6.2.1环境准备
1,创建一个maven项目
2,pom.xml添加依赖
3,resources下添加spring的配置文件
这些不重要和前面一致,可以快速拷贝,最终结构如下:
步骤一:项目中添加添加BookDao、BookDaoImpl类(记得提供setter方法)
BookDao:
public interface BookDao {
public void save();
}
BookDaoImpl:
public class BookDaoImpl implements BookDao {
private int[] array;
private List<String> list;
private Set<String> set;
private Map<String,String> map;
private Properties properties;
public void save() {
System.out.println("BookDao save...");
System.out.println("遍历数组:" + Arrays.toString(array));
System.out.println("遍历List" + list);
System.out.println("遍历Set" + set);
System.out.println("遍历Map" + map);
System.out.println("遍历Properties" + properties);
}
}
步骤二:resources下提供spring的配置文件,applicationContext.xml
<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"></bean>
步骤三:编写App运行类,加载Spring的IOC容器,并从中获取对应的bean对象
public class App {
public static void main( String[] args ) {
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) context.getBean("bookDao");
bookDao.save();
}
}
6.2.2注入数据
<bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl">
<!--注入数组类型数据-->
<property name="array">
<array>
<value>10</value>
<value>20</value>
<value>30</value>
</array>
</property>
<!--注入list类型数据-->
<property name="list">
<list>
<value>ZhangSan</value>
<value>LiSi</value>
<value>WangWu</value>
<value>ZhaoLiu</value>
</list>
</property>
<!--注入set类型数据-->
<property name="set">
<set>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</set>
</property>
<!--注入map类型数据-->
<property name="map">
<map>
<entry key="country" value="China"/>
<entry key="province" value="JiangXi"/>
<entry key="city" value="JiuJiang"/>
</map>
</property>
<!--注入properties类型数据-->
<property name="properties">
<props>
<prop key="国家">中国</prop>
<prop key="省份">江西</prop>
<prop key="城市">九江</prop>
</props>
</property>
</bean>
运行结果:
说明: