介绍&步骤
视频链接: https://www.bilibili.com/video/BV1WZ4y1P7Bp/?p=5
官方笔记链接:https://pan.baidu.com/s/1dnL5hwOPHPMNgb81yzQIOQ
提取码:2022
前提创建一个空的maven项目, 这里命名为spring_ioc
目录:
项目目录结构:
整体流程图:
① 导入 Spring 开发的基本包坐标
② 编写 Dao 接口和实现类
③ 创建 Spring 核心配置文件
④ 在 Spring 配置文件中配置 UserDaoImpl
⑤ 使用 Spring 的 API 获得 Bean 实例
1.Spring快速入门
1.1 导入Spring开发的基本包坐标
<dependencies>
<!-- 使用spring需要导入的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<!--用于测试 如果有需要-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
1.2 编写Dao接口和实现类
接口类UserDao
public interface UserDao {
public void save();
}
实现类UserDaoImpl
public class UserDaoImpl implements UserDao {
public void init(){
System.out.println("init.....");
}
public void destroy(){
System.out.println("destroy.....");
}
public UserDaoImpl(){
System.out.println("UserDaoImpl Construct ....");
}
public void save() {
System.out.println("UserDao save method running.....");
}
}
1.3 创建Spring核心配置文件
1.3.1在类路径下(resources)创建applicationContext.xml配置文件
New—>XML Configuration File—>Spring Config—>applicationContext.xml
1.4 在 Spring 配置文件中配置UserDaoImpl
<?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">
<!--配置UserDaoImpl-->
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
</beans>
相当于spring中存放了UserDao类型的实体类
1.5 使用Spring的API获得 Bean 实例
1.5.1 通过getBean(“id”)的方法得到Bean对象实例
通过Spring容器中的id得到对象实例
public class SpringTest {
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao)applicationContext.getBean("userDao"); // 通过id为userDao的bean得到UserDao对象
userDao.save();
}
}
1.5.2 通过getBean(Class)的方法得到Bean对象实例
当前Spring容器中只有一个UserDao Bean的实例可以使用 如果有多个UserDao的Bean实例会出现报错
public class SpringTest {
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = applicationContext.getBean(UserDao.class);
userDao.save();
}
}
2.Spring 配置文件
2.1Bean标签基本配置
用于配置对象交由Spring 来创建。
默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。
基本属性:
id:Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称
2.2标签范围配置
<bean id="userDao" class="com.itheima.impl.UserDaoImpl" scope="prototype" init-method="init" destroy-method="destroy"></bean>
2.3Bean生命周期配置
<bean id="userDao" class="com.itheima.impl.UserDaoImpl" scope="prototype" init-method="init" destroy-method="destroy"></bean>
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁方法名
2.4Bean实例化三种方式
- 无参构造方法实例化
- 工厂静态方法实例化
- 工厂实例方法实例化
2.4.1无参构造方法实例化
public class SpringTest {
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = applicationContext.getBean(UserDao.class);
userDao.save();
}
}
配置普通的bean即可 默认会调用UserDaoImpl的无参构造方法
没有无参构造方法的话会报错
<?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">
<!--配置UserDaoImpl-->
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
</beans>
2.4.2工厂静态方法实例化
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
applicationContext.xml中的文件配置
因为是静态方法,所以 直接使用类.静态方法
调用
<?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 id="userDao" class="com.itheima.factory.StaticFactoryBean" factory-method="createUserDao"/>
</beans>
2.4.3工厂实例方法实例化(动态方法)
动态方法
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
applicationContext.xml中的文件配置
因为要调用createUserDao方法需要使用DynamicFactoryBean对象
所以需要先创建一个DynamicFactoryBean对象的Bean
然后再创建一个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 id="factoryBean" class="com.itheima.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
</beans>
2.5 引入其他配置文件
文件名 applicationContext-xxx.xml
resource目录下
<import resource="applicationContext-xxx.xml"/>
3.依赖注入
- 构造方法
- set方法
3.1set方法注入(需要使用set方法)
案例: 将userDao注入到userService中
service层的接口和实现类
public interface UserService {
void save();
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
applicationContext.xml
文件配置
<?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 id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
</beans>
java代码和xml文件对应关系
3.2构造方法注入
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
applicationContext.xml
配置文件
<?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 id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
</beans>
java代码和xml文件对应
4.Spring普通数据类型的注入
- 普通数据类型
- 引用数据类型
- 集合数据类型
4.1 普通数据类型
public class UserDaoImpl implements UserDao {
private String company;
private int age;
public void setCompany(String company) {
this.company = company;
}
public void setAge(int age) {
this.age = age;
}
public void save() {
System.out.println(company+"==="+age);
System.out.println("UserDao save method running....");
}
}
applicationContext.xml
配置文件
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="company" value="传智播客"></property>
<property name="age" value="15"></property>
</bean>
4.2 集合数据类型
准备User实体类
// set, get,toString方法省略 自行实现
public class User {
private String name;
private String addr;
}
UserDaoImpl 文件
public class UserDaoImpl implements UserDao {
private List<String> strList;
private List<User> userList;
private Map<String,User> userMap;
private Properties properties;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void save() {
System.out.println(strList);
System.out.println(userList);
System.out.println(userMap);
System.out.println(properties);
System.out.println("UserDao save method running....");
}
}
applicationContext.xml
配置文件
<bean id="u1" class="com.itheima.domain.User">
<property name="name" value="kobe"></property>
<property name="addr" value="lakes"/>
</bean>
<bean id="u2" class="com.itheima.domain.User">
<property name="name" value="jordan"></property>
<property name="addr" value="公牛"/>
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="userList">
<list>
<!--前两个没有配置属性 所以为空-->
<bean class="com.itheima.domain.User"/>
<bean class="com.itheima.domain.User"/>
<ref bean="u1"/>
<ref bean="u2"/>
</list>
</property>
<property name="userMap">
<map>
<entry key="user1" value-ref="u1"/>
<entry key="user2" value-ref="u2"/>
</map>
</property>
<property name="properties">
<props>
<prop key="p1">aaa</prop>
<prop key="p2">bbb</prop>
<prop key="p3">ccc</prop>
</props>
</property>
</bean>