Spring-学习笔记02【程序间耦合】
- Java后端 学习路线 笔记汇总表【黑马程序员】
- Spring-学习笔记01【Spring框架简介】【day01】
- Spring-学习笔记02【程序间耦合】
- Spring-学习笔记03【Spring的IOC和DI】
- Spring-学习笔记04【Spring的常用注解】【day02】
- Spring-学习笔记05【基于XML的IOC的案例1】
- Spring-学习笔记06【Spring的新注解】
- Spring-学习笔记07【银行转账案例】【day03】
- Spring-学习笔记08【面向切面编程AOP】
- Spring-学习笔记09【JdbcTemplate的基本使用】【day04】
- Spring-学习笔记10【Spring事务控制】
目录
01 编写jdbc的工程代码用于分析程序的耦合
1.1、创建数据表
1.2、编写数据库测试代码
02 编译期依赖
03 程序的耦合和解耦的思路分析1
04 曾经代码中的问题分析
05 编写工厂类和配置文件
06 工厂模式解耦
07 分析工厂模式中的问题并改造
08 工厂模式解耦的升级版
01 编写jdbc的工程代码用于分析程序的耦合
1.1、创建数据表
create database eesy;use eesy;CREATE TABLE account(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(40),money FLOAT
)CHARACTER SET utf8 COLLATE utf8_general_ci;INSERT INTO account(NAME,money) VALUES('aaa',1000);
INSERT INTO account(NAME,money) VALUES('bbb',1000);
INSERT INTO account(NAME,money) VALUES('ccc',1000);
1.2、编写数据库测试代码
package com.iteima.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class JdbcDemo1 {public static void main(String[] args) throws Exception {//1.注册驱动//DriverManager.registerDriver(new com.mysql.jdbc.Driver());Class.forName("com.mysql.jdbc.Driver");//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy", "root", "root");//3.获取操作数据库的预处理对象PreparedStatement pstm = conn.prepareStatement("select * from account");//4.执行SQL,得到结果集ResultSet rs = pstm.executeQuery();//5.遍历结果集while (rs.next()) {System.out.println(rs.getString("name"));}//6.释放资源rs.close();pstm.close();conn.close();}
}
02 编译期依赖
03 程序的耦合和解耦的思路分析1
* 程序的耦合* 耦合:程序间的依赖关系* 包括:类之间的依赖、方法间的依赖* 解耦:* 降低程序间的依赖关系* 实际开发中:* 应该做到:编译期不依赖,运行时才依赖。* 解耦的思路:* 第一步:使用反射来创建对象,而避免使用new关键字;* 第二步:通过读取配置文件来获取要创建的对象全限定类名。
04 曾经代码中的问题分析
05 编写工厂类和配置文件
/*** 一个创建Bean对象的工厂** Bean:在计算机英语中,有可重用组件的含义。* JavaBean:用java语言编写的可重用组件。* javabean > 实体类** 它就是创建我们的service和dao对象的。** 第一个:需要一个配置文件来配置我们的service和dao* 配置的内容:唯一标识=全限定类名(key=value)* 第二个:通过读取配置文件中配置的内容,反射创建对象** 我的配置文件可以是xml也可以是properties*/
06 工厂模式解耦
07 分析工厂模式中的问题并改造
08 工厂模式解耦的升级版
package com.itheima.factory;import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;/*** 一个创建Bean对象的工厂** Bean:在计算机英语中,有可重用组件的含义。* JavaBean:用java语言编写的可重用组件。* javabean > 实体类** 它就是创建我们的service和dao对象的。** 第一个:需要一个配置文件来配置我们的service和dao* 配置的内容:唯一标识=全限定类名(key=value)* 第二个:通过读取配置文件中配置的内容,反射创建对象** 我的配置文件可以是xml也可以是properties*/
public class BeanFactory {//定义一个Properties对象private static Properties props;//定义一个Map,用于存放我们要创建的对象。我们把它称之为容器private static Map<String, Object> beans;//使用静态代码块为Properties对象赋值static {try {//实例化对象props = new Properties();//获取properties文件的流对象,类加载器getClassLoader()InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");props.load(in);//实例化容器beans = new HashMap<String, Object>();//取出配置文件中所有的KeyEnumeration keys = props.keys();//遍历枚举while (keys.hasMoreElements()) {//取出每个KeyString key = keys.nextElement().toString();//根据key获取valueString beanPath = props.getProperty(key);//反射创建对象Object value = Class.forName(beanPath).newInstance();//把key和value存入容器中beans.put(key, value);}} catch (Exception e) {throw new ExceptionInInitializerError("初始化properties失败!");}}/*** 根据bean的名称获取对象** @param beanName* @return*/public static Object getBean(String beanName) {return beans.get(beanName);}/*** 根据Bean的名称获取bean对象* @param beanName* @return*/public static Object getBean2(String beanName) {Object bean = null;try {String beanPath = props.getProperty(beanName);//System.out.println(beanPath);//反射方式创建对象bean = Class.forName(beanPath).newInstance();//每次都会调用默认构造函数创建对象} catch (Exception e) {e.printStackTrace();}return bean;}
}
Spring-学习笔记02【程序间耦合】相关推荐
- JavaEE——Spring学习笔记03【AOP开发】
JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...
- JavaEE——Spring学习笔记01【Ioc开发的模式】
JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...
- Spring学习(2)-程序间耦合和工厂模式解耦
程序的耦合及解耦 本文目录 程序的耦合及解耦 1.什么是程序的耦合 2.解决程序耦合的思路 3.工厂模式解耦 4.控制反转-Inversion Of Control 5.使用 spring 的 的 I ...
- Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能
Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能 在学习笔记01里,我们利用跨域打通了前端的Vue与后端的Spring Boot,实现了用户登录功能,但是后台的登录控制器在 ...
- Spring学习笔记:第一个Spring Boot程序HelloWorld
Spring学习笔记:第一个Spring Boot程序HelloWorld 一.跟着 Spring 了解技术趋势 1.看看 Spring 5.x 的改变暗示了什么 2.Spring Boot 和 Sp ...
- spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)
spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...
- python学习笔记02
python学习笔记02 面向对象Object Oriented 概述 类和对象 封装 继承 多态 类与类的关系 设计原则 总结 python学习笔记03 面向对象Object Oriented 概述 ...
- 【计算机网络学习笔记02】计算机网络概述(中)
[计算机网络学习笔记02]计算机网络概述(中) 计算机网络的定义.组成与分类 1计算机网络的定义 1.1 简单定义: 一些相互连接的.以共享资源为目的的.自治的计算机的集合. 1.2 通用定义: 利用 ...
- Spring学习笔记之MyBatis
系列文章目录 Spring学习笔记 之 Springhttps://blog.csdn.net/weixin_43985478/article/details/124411746?spm=1001.2 ...
最新文章
- 计算机书籍-机器学习预测分析Go语言实现
- MATLAB与C#混合编程
- css的三种定位方式使用探讨
- linux驱动篇之 driver_register 过程分析(一)
- 多生产者_你是生产者还是消费者?这决定了你的层次。
- 如何自定义Hibernate脏检查机制
- Ubuntu作为服务器其tomcat被远程访问问题
- VC++实现混合静态分裂视窗的方法
- ES6 import export
- STL的Vector介绍
- 探索社群系统ThinkSNS品牌10周年!
- 嵩天《Python数据分析与展示》实例3:Matplotlib基础图表绘制
- 下载Instagram的图片
- 虚拟机配置--网络、MySQL数据库、JDK环境变量
- 不用等微信官方!微信圣诞帽,我用Python就能搞定!
- 多幸运用计算机演奏的乐谱,多幸运钢琴简谱-数字双手-韩安旭
- PC端微信扫码支付二维码生成接口的调整
- Android UI设计经验分享,掌握设计技巧,让你的应用独树一帜
- Pytorch加载torchvision从本地下载好的预训练模型的简单解决方案
- Java农历(阴历)工具类
热门文章
- mysql异地备份_MySQL数据库异地备份与还原方法
- k8s服务器修改ip,[转载][K8S] Kubernetes 集群变更IP地址
- ddr4服务器内存和普通内存_DDR4内存可以在普通电脑上使用吗?有影响吗?
- 九十六、双指针和滑动窗口算法模板
- mysql分区跨机器_(转) mysql的分区技术 .
- 北京内推 | 微软亚洲研究院DKI组王露研究员招聘强化学习方向研究实习生
- 时间自适应卷积:比自注意力更快的特征提取器
- 论文盘点:CVPR 2019 - 文本检测专题
- 每周论文清单:高质量文本生成,多模态情感分析,还有一大波GAN | PaperDaily #26
- 动态规划-KMP字符匹配算法