Spring快速入门&配置文件&依赖注入(一)

介绍&步骤

视频链接: 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实例化三种方式

  1. 无参构造方法实例化
  2. 工厂静态方法实例化
  3. 工厂实例方法实例化

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>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值