Spring学习:程序的耦合和解耦的思路分析

程序的耦合

  耦合:程序间的依赖关系

    包括:

      类之间的依赖

      方法间的依赖

  解耦:

    降低程序间的依赖关系

  在实际开发中:

    应该做到,编译期不依赖,运行时才依赖

  解耦思路:

    第一步:使用反射来创建对象,而避免使用new关键词

    第二步:通过读取配置文件来获取要创建的对象全限定类名


创建BeanFactory  

 1 /**
 2  * 一个创建Bean对象的工厂
 3  *
 4  * Bean:在计算机英语中,有可重用组件的含义
 5  * JavaBean:用java语言编写的可重用组件
 6  *          javabean > 实体类
 7  *
 8  *    它就是创建我们的service的dao对象的
 9  *    第一个:需要一个配置文件来配置我们的service和dao
10  *          配置的内容:唯一标识=全限定类名
11  *    第二个:通过读取配置文件中配置的内容,反射创建对象
12  *
13  *    配置文件可以是xml也可以是properties
14  *
15  */
16 public class BeanFactory {
17
18     //定义一个Properties对象
19     private static Properties props;
20
21     //使用静态代码块为Properties对象赋值
22     static {
23         try {
24             //实例化对象
25             props = new Properties();
26             //获取properties文件的流对象,创建在resources文件夹下的properties文件会成为类根路径下的文件,不用写包名
27             InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
28             props.load(in);
29         } catch (Exception e) {
30             throw new ExceptionInInitializerError("初始化properties失败");
31         }
32     }
33
34     /**
35      * 根据Bean的名称获取bean对象
36      * @param beanName
37      * @return
38      */
39     public static Object getBean(String beanName){
40         Object bean = null;
41         try{
42             String beanPath = props.getProperty(beanName);
43             System.out.println(beanPath);
44             bean = Class.forName(beanPath).newInstance();
45         }catch (Exception e){
46             e.printStackTrace();
47         }
48         return bean;
49     }
50
51 }


调用BeanFactory,反射创建对象

 1 /**
 2  * 账户业务层实现类
 3  */
 4 public class AccountServiceImpl implements IAccountService {
 5
 6     //private IAccountDao accountDao = new AccountDaoImpl();
 7     private IAccountDao accountDao = (IAccountDao) BeanFactory.getBean("accountDao");
 8
 9     public void saveAccount(){
10         accountDao.saveAccount();
11     }
12 }
 1 /**
 2  * 模拟一个表现层,用于调用业务层
 3  */
 4 public class Client {
 5
 6     public static void main(String[] args) {
 7 //        IAccountService accountService = new AccountServiceImpl();
 8         IAccountService accountService = (IAccountService) BeanFactory.getBean("accountService");
 9         accountService.saveAccount();
10     }
11 }

原文地址:https://www.cnblogs.com/flypig666/p/11508214.html

时间: 2024-11-05 13:42:04

Spring学习:程序的耦合和解耦的思路分析的相关文章

阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1

编译时没有对应需要的jar包就报错.这特性就理解为程序的耦合 这种方式,它不是个错误而是个异常.编译的时候没有问题.运行时才会报错. 把注释的代码放开 程序可以正常运行 解决类之前依赖的思路 一个依赖的是具体的驱动类.第二个通过反射去创建依赖的只是一个字符串.这样可以减少耦合.这样同样导致的问题是.驱动的字符串在这里写死了.如果要更新数据库的话.这里还要改.可以通过读取配置文件的方式解决这个问题 原文地址:https://www.cnblogs.com/wangjunwei/p/11336449

Spring学习之第一个AOP程序

IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组合,OOP 最大问题就是无法解耦组件进行开发,比如我们上边举例,而 AOP 就是为了克服这个问题而出现的,它来进行这种耦合的分离.AOP 为开发者提供一种进行横切关注点(比如日志关注点)分离并织入的机制,把横切关注点分离,然后通过某种技术织入到系统中,从而无耦

我的第一个spring boot程序(spring boot 学习笔记之二)

第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相关知识点时会再次理解.要运行起第一个Spring boot特别简单,用IDEA包含了Spring Boot的引导,直接新建一个spring boot项目. 注意: 1.第一次新建Spring boot项目的时候,maven会下载大量的依赖到本地,所以特别慢,耐心等待或者用国内的maven公库都行(自

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

不错的Spring学习笔记(转)

Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是spring.jar和commons-logging.jar.此外为了便于测试加入了JUnit包.   在Myeclipse中创建Java项目.   编写一个接口类,为了简单,只加入了一个方法.   Java代码   1.package com.szy.spring.interfacebean;  

spring学习一——基本搭建,属性注入的两种方式

今天用spring 3.2.5搭建了基本的环境,spring出的太快了,前段时间才3.2.5,今儿个一瞧已经上了4的版本了,稍后给出spring的jar下载地址,毕竟现在官网上找不到了啊. 废话少说了,spring 3.2.5已经将所有的依赖包都放在了dist的lib下面,并且都有doc包和源码包,很是方便.先导入所需的jar包:core,context,beans,expression 四个jar包,除此之外,还需导入commons-logging. 下一步,新建xml文件,建议名称为 app

spring学习笔记(一) Spring概述

博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring的优势在哪里?怎么系统的学习Spring? 一.什么是Spring? Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发. 那有人就会问了,Spring是如何简化开发的? 在传统开发中,一个应用是需

Spring MVC程序

Spring MVC程序(IDEA开发环境) 回顾Java平台上Web开发历程来看,从Servlet出现开始,到JSP繁盛一时,然后是Servlet+JSP时代,最后演化为现在Web开发框架盛行的时代.一般接触到一个新的Web框架,都会想问这个框架优势在哪?或者比其他框架好在哪里?如果没有使用Spring MVC框架,而是使用其他框架并且能够很好地满足要求,这样转换框架或许不是一个好主意.如果像我这样首次接触Web开发框架,Spring MVC还是值得优先考虑的. Web层,更确切说是在框架处理

第一个Spring MVC程序

最近公司项目要开始使用Spring MVC替代Struts2了,就学习了一下Spring MVC的使用.这是第一个Spring mvc程序,分别使用xml和注解两种方式. 一.使用xml格式进行构建 1.使用SpringMVC,首选需要在web.xml中配置拦截器和过滤器 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XM