六十九、Spring入门案例(Spring与IOC)

81 阅读4分钟

在ecplise中创建Web项目,发布并运行

目录

理论连接

项目整体框架

项目准备

项目启动

依赖注入

Spring与IOC总结


理论连接

六十八、Spring框架入门 -- 理论_托马斯-酷涛的博客-CSDN博客1、Spring 是轻量级的开源的 JavaEE 框架2、Spring 可以解决企业应用开发的复杂性3、Spring 有两个核心部分:IOC 和 Aop ...https://blog.csdn.net/m0_54925305/article/details/123074976?spm=1001.2014.3001.5501

项目整体框架

项目准备

1、Spring下载

tuomasi.lanzouy.com/iD2dd00kjk2…

        密码:Spring

2、SSM全套Jar包

tuomasi.lanzouy.com/b02uszjch

        密码:jars

项目启动

1、创建Web项目

2、将Jar包拷贝到 lib 目录下

 3、在 src 目录下新建包

 4、创建接口 UserDao

 5、写一个简单的say方法

 6、创建实现类

 7、打印 hello World

8、src 目录下创建xml

9、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-4.3.xsd">
	<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
	<bean id="userDao" class="com.Example.ioc.UserDaoImpl"></bean>
	</bean>
</beans>

10、创建测试类

 11、通过容器获取并调用实例方法

 12、运行程序

         注:say方法被调用

Spring IOC: 在main方法中没有通过new关键字来创建UserDao接口的实现类对象,而是通过Spring容器来获取的实现类对象,这就是Spring IOC容器的工作机制

依赖注入

控制反转: 在使用Spring框架后,对象的实例不再由调用者创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是Spring的控制反转。

依赖注入: 从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这样相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

1、创建接口UserService

public interface UserService {
	public void say();
}

2、创建实现类UserServicelmpl

public class UserServiceImpl implements UserService {

	// 声明属性
	private UserDao userDao;

	// 添加userDao属性的setter方法,用于实现依赖注入
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	public void say() {

		// 调用userDao中的say()方法,执行输出语句
		this.userDao.say();

		System.out.println("userService say hell world!");

	}

}

3、添加 xml 依赖

	<!-- 添加一个id为userService的实例 -->
	<bean id="userService" class="com.Example.ioc.UserServiceImpl">
		<!-- 将id为userDao的Bean实例注入到userService -->
		<property name="userDao" ref="userDao"></property>
	</bean>

        注:<property>是<bean>元素的子元素,它用于调用Bean实例中的setUserDao()方法完成属性赋值,从而实现依赖注入。

        name属性表示Bean实例中的相应属性名,ref属性用于指定其属性值。

4、创建测试类进行测试

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestDI {

	public static void main(String[] args) {
		// 1.初始化Spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 2.通过容器获取UserService实例
		UserService userService = (UserService) applicationContext.getBean("userService");
		// 3.调用实例中的say()方法
		userService.say();
	}

}

5、运行程序

         注:使用Spring容器通过UserService实现类中的say()方法,调用了UserDao实现类中的say()方法,并输出了结果。这就是Spring容器属性setter注入的方式,也是实际开发中最为常用的一种方式。

Spring与IOC总结

控制反转(IOC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代 码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对 象控制权的转移,从程序代码本身反转到了外部容器。

IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种: 依赖注入和依赖查找。依赖注入方式应用更为广泛。

1、依赖查找:Dependency Lookup,DL,容器提供回调接口和上下文环境给组件,程序代 码则需要提供具体的查找方式。比较典型的是依赖于 JNDI 系统的查找。

2、依赖注入:Dependency Injection,DI,程序代码不做定位查询,这些工作由容器自行完成。

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持 POJO 之间依赖关系的管理。

依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。