理论连接
六十八、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下载
https://tuomasi.lanzouy.com/iD2dd00kjk2h
密码:Spring
2、SSM全套Jar包
https://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 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。