ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Spring简介-IOC
[打印本页]
作者:
王海鱼
时间:
2023-3-9 21:42
标题:
Spring简介-IOC
目录
1、Spring
1.1、简介
1.2、优点
1.3、组成
1.4、扩展
2、IOC理论推导
1、Spring
1.1、简介
Spring:春天----------->给软件行业带来了春天!
2002,首次推出了Spring框架的雏形:interf21框架!
Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日发布了1.0正式版。
Rod Johnson ,Spring Framework创始人,悉尼大学音乐学博士,计算机学位
Spring理念:使现有的技术更加容易使用,本身就是一个大杂烩,整合了现有的技术框架!
SSH: Struct2+Spring +Hibernate!
SSM: SpringMvc+Spring+Mybatis!
官网:
Spring Framework
官网下载地址:
repo.spring.io
GitHub:
GitHub - spring-projects/spring-framework: Spring Framework
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
ctrl+shift+o 导入
复制代码
1.2、优点
Spring使一个开源的免费的框架(容器)!
Spring使一个轻量级的、非入侵式的框架!
控制反转(IOC),面向切面编程(AOP)!
支持事务的处理,对框架整合的支持!
总结一句话:Springjiushi+一个轻量级的控制反转(IOC)和面向切面编程的框架!
1.3、组成
1.4、扩展
在Spring的官网有这个介绍:现代化的java开发!说白就是基于Spring的开发!
Spring Boot
一个快速开发的脚手架
基于SpingBoot可以快速的开发单个微服务
约定大于配置!
Spring Cloud
SpringCloud式基于SpringBoot实现的
因为现在大多数公司都在使用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring以及SpringMVC!承上启下的作用!
弊端:发展了太久之后,违背了原来的理念!配置十分繁琐,人称“ 配置地狱!”
2、IOC理论推导
UserDao接口
package com.jan.dao;
public interface UserDao {
void getUser();
}
复制代码
UserDaoImpl实现类
package com.jan.dao;
public class UserDaoImpl implements UserDao{
public void getUser() {
System.out.println("默认获取用户的数据!");
}
}
复制代码
UserService 业务接口
package com.jan.dao.service;
public interface UserService {
void getUser();
}
复制代码
UserService Impl 业务实现类
package com.jan.dao.service;
import com.jan.dao.UserDao;
import com.jan.dao.UserDaoImpl;
import com.jan.dao.UserDaoMysqlImpl;
import com.jan.dao.UserDaoOracleImpl;
public class UserServiceImpl implements UserService{
//增加了 UserDaoMysqlImpl 类,就必须来改变 UserServiceImpl 类 里面的源代码,
//如是很多类不得累死?解决的办法?
//private UserDao userDao = new UserDaoImpl();//对象写死了
// private UserDao userDao = new UserDaoMysqlImpl();//对象写死了
// private UserDao userDao = new UserDaoOracleImpl();//对象写死了
private UserDao userDao;
//利用set动态实现值的注入!!
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
复制代码
若是有其他新增加的Impl类
package com.jan.dao;
public class UserDaoMysqlImpl implements UserDao{
public void getUser() {
System.out.println("Mysql获取用户数据!");
}
}
复制代码
MyTest的实现
import com.jan.dao.UserDaoSqlserverImpl;
import com.jan.dao.service.UserService;
import com.jan.dao.service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
//用户实际调用的是业务层,dao层它们不需要接触!
UserService userService = new UserServiceImpl();
((UserServiceImpl) userService).setUserDao(new UserDaoSqlserverImpl());
userService.getUser();
}
}
复制代码
在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一次的成本代价十分昂贵!
我们使用了一个Set接口实现,已经发生了革命性的变化!
private UserDao userDao;
//利用set动态实现值的注入!!
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
复制代码
之前,程序是主动创建对象!控制权在程序猿手上!
private UserDao userDao = new 8UserDaoMysqlImpl();//对象写死了
复制代码
使用set注入后,程序不再具有主动性,而是成了被动的接受对象!
这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低了,可以更加专注的在业务的实现上!这是IOC的原型!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4