Java框架_Spring5_day01_Spring概述、耦合、IOC

Spring基础知识 day01 Spring概述&Spring基于XML的IOC 一、Spring 概述 1.1Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。 1.2sprin.. 阅读详情

目录

一、Spring 概述

1.1 Spring 是什么

1.2 Spring 的发展历程

1.3 Spring 的优势

1.4 Spring 的体系结构

二、IoC 的概念和作用

2.1 程序的耦合和解耦

2.2 解决程序耦合的思路一:反射

2.3 解决程序耦合的思路二:工厂模式

2.4 控制反转 - Inversion Of Control


一、Spring 概述

1.1 Spring 是什么

       Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

1.2 Spring 的发展历程

       可参考 https://spring.io/projects/spring-framework#learn

1.3 Spring 的优势

1:方便解耦,简化开发 (工厂模式)

       通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2:AOP编程的支持 (jdk动态代理、cglib动态代理)

       通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

声明式事务的支持可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

3:方便程序的测试(和Junit整合)

        可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。

4:方便集成各种优秀框架

       Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Mybatis、Hessian、Quartz、ActivityMQ、Redis等)的直接支持。

5:降低JavaEE API的使用难度 (SSM整合)

       Spring对JavaEE API(如JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API的使用难度大为降低。

6.Java源码是经典学习范例

       Spring的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。它的源代码无意是Java技术的最佳实践的范例。

1.4 Spring 的体系结构

二、IoC 的概念和作用

2.1 程序的耦合和解耦

       耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。

​        耦合性存在于各个领域,而非软件设计中独有的,但是我们只讨论软件工程中的耦合。

​        在软件工程中,耦合指的就是就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

它有如下分类:

(1) 内容耦合。当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。

(2) 公共耦合。两个或两个以上的模块共同引用一个全局数据项,这种耦合被称为公共耦合。在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的。

(3) 外部耦合 。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。

(4) 控制耦合 。一个模块通过接口向另一个模块传递一个控制信号,接受信号的模块根据信号值而进行适当的动作,这种耦合被称为控制耦合。

(5) 标记耦合 。若一个模块A通过接口向两个模块B和C传递一个公共参数,那么称模块B和C之间存在一个标记耦合。

(6) 数据耦合。模块之间通过参数来传递数据,那么被称为数据耦合。数据耦合是最低的一种耦合形式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另一些模块的输入数据。

(7) 非直接耦合 。两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。

总结:

       耦合是影响软件复杂程度和设计质量的一个重要因素==,在设计上我们应采用以下原则:如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用内容耦合。

内聚:

       内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却要不那么紧密。

       内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合。

2.2 解决程序耦合的思路一:反射

使用反射技术创建 JDBC 连接,避免使用 new 关键字:

import java.sql.*;

public class JdbcDemo {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //1.注册驱动
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        // 使用反射来创建对象,而避免使用new关键字。
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/itcastspring","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("username"));
        }
        //6.释放资源
        rs.close();
        pstm.close();
        conn.close();
    }
}

2.3 解决程序耦合的思路二:工厂模式

使用工厂模式+反射技术创建对象:

bean.properties 配置文件

accountService=com.cpz.service.impl.AccountServiceImpl
accountDao=com.cpz.dao.impl.AccountDaoImpl

ApplicationContext.java(工厂)

package com.cpz.dao.factory;

import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class ApplicationContext {

    // 创建的对象放置到配置文件(xml,properties)
    private static Properties properties = null;
    // 加载工厂创建的所有的对象,放置Map<String,Object>
    private static Map<String,Object> map = null;
    // 加载工厂创建的所有的对象,放置Map<String,Object>
    static {
        properties = new Properties();
        InputStream is = ApplicationContext.class.getClassLoader().getResourceAsStream("bean.properties");
        map = new HashMap<String, Object>();
        try {
            properties.load(is);
            // 读取properties文件中的key值
            Enumeration<Object> keys = properties.keys();
            while (keys.hasMoreElements()){
                // 读取每个key值
                String key = keys.nextElement().toString();
                // 通过key值,读取value
                String path = properties.get(key).toString();
                // 使用反射,创建对象
                Object obj = Class.forName(path).newInstance();
                // 存放到map中
                map.put(key,obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Object getBean(String name){
        Object obj = map.get(name);
        return  obj;
    }
}

AccountService.java 接口

package com.cpz.service;

public interface AccountService {
    public void saveAccount();
}

AccountServiceImpl.java 实现类

package com.cpz.service.impl;

import com.cpz.dao.AccountDao;
import com.cpz.dao.factory.ApplicationContext;
import com.cpz.service.AccountService;

public class AccountServiceImpl implements AccountService {
    public void saveAccount() {
        System.out.println("执行AccountServiceImpl中的saveAccount方法!");
        AccountDao accountDao = (AccountDao) ApplicationContext.getBean("accountDao");
        accountDao.saveAccount();
    }
}

AccountDao.java 接口

package com.cpz.dao;

public interface AccountDao {
    public void saveAccount();
}

AccountDaoImpl.java 实现类

package com.cpz.dao.impl;

import com.cpz.dao.AccountDao;

public class AccountDaoImpl implements AccountDao {
    public void saveAccount() {
        System.out.println("执行AccountDaoImpl类中的saveAccount方法!");
    }
}

Main.java 测试类

package com.cpz.main;

import com.cpz.dao.factory.ApplicationContext;
import com.cpz.service.AccountService;

public class Client {
    public static void main(String[] args) {

        AccountService accountService = (AccountService) ApplicationContext.getBean("accountService");
        accountService.saveAccount();

    }
}

2.4 控制反转 - Inversion Of Control

原来:我们在获取对象时,都是采用new的方式。是主动的。

现在:我们获取对象时,同时跟工厂要,有工厂为我们查找或者创建对象。是被动的。这种被动接收的方式获取对象的思想就是控制反转(IOC),它是spring框架的核心之一。

明确IOC的作用: 削减计算机程序的耦合(解除我们代码中的依赖关系),将对象的创建和调用都交给spring容器去处理

2.5 单例对象

2.5.1 测试单例对象

Client.java

package com.cpz.main;

import com.cpz.dao.factory.ApplicationContext;
import com.cpz.service.AccountService;

public class Client {
    public static void main(String[] args) {

        AccountService accountService1 = (AccountService) ApplicationContext.getBean("accountService");
        accountService1.saveAccount();
        AccountService accountService2 = (AccountService) ApplicationContext.getBean("accountService");
        accountService2.saveAccount();
        AccountService accountService3 = (AccountService) ApplicationContext.getBean("accountService");
        accountService3.saveAccount();

        System.out.println(accountService1);
        System.out.println(accountService2);
        System.out.println(accountService3);
    }
}

结果显示:

       由图我们可以看出,调用了三次getBean方法所产生的三个对象其实是一个对象,他们的地址值完全相同。

2.5.2 单例对象的变量问题

AccountServiceImpl.java

       首先,我们在 AccountServiceImpl.java 文件中加入一个全局变量 i ,并在 saveAccount 方法中使 i 自增1。

public class AccountServiceImpl implements AccountService {
    AccountDao accountDao = (AccountDao) ApplicationContext.getBean("accountDao");
    int i = 1;
    public void saveAccount() {
        System.out.println("执行AccountServiceImpl中的saveAccount方法! i = " + i);
        accountDao.saveAccount();
        i++;
    }
}

Client.java

       然后在主方法中循环调用 getBean 方法,不断创建 AccountService 对象,并用对象调用 saveAccount 方法,看 i 的值的变化。

public class Client {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            AccountService accountService = (AccountService) ApplicationContext.getBean("accountService");
            accountService.saveAccount();
        }
    }
}

结果显示:

       由图可知,当其为单例对象时,使用全局变量会导致全局变量的值不断被修改。所以在单例对象模式下,我们只能使用局部变量,即将 AccountServiceImpl.java 中的 i 放入 saveAccount 方法中。

总结:单例对象,不要使用全局变量,只能使用局部变量,因为全局变量的值会被修改

2.6 多例对象

2.6.1 测试多例对象

       我们可以修改工厂类中的 getBean 方法来使单例对象变为多例对象,其核心思想为每次调用方法都会重新创建一个工厂对象,这样每次得到的对象就不同了。

ApplicationContext.java

    // 多例对象
    public static Object getBean(String name) {
        Object obj = null;
        String path = properties.getProperty(name);
        try {
            obj = Class.forName(path).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return obj;
    }

结果显示:

       由图可知,调用方法后每次返回的对象不再是同一个对象,则为多例对象。

DESeq2差异分析结果不会看?用这个R脚本5分钟生成发表级火山图和热图 本文详细介绍了如何使用R语言快速可视化DESeq2差异分析结果,5分钟内生成可直接用于论文发表的火山图和热图。通过解析DESeq2数据结构、展示ggplot2和EnhancedVolcano包的绘图技巧,以及pheatmap包的热图定制方法,帮助研究者高效呈现差异表达基因分析结果。 阅读详情

相关推荐

软件测试学习笔记(二)图覆盖

软件测试学习笔记(二)图覆盖 课程链接软件测试_中国大学MOOC 2.1 测试中的图 2.2 图覆盖准则 1、什么是图? 点的集合和边的集合。点或者结点,有穷非空的集合。边是点对。 2、图为什么在软件测试中具有重要地位? 所谓软件测试就是将软件变作一张图,然后覆盖它,不仅仅是软件,图更是计算机科学重要的结构。 3、软件测试中的图是如何得到的? 常见的图可以来自源代码,常见的是控制流图,还有各种各样...

DZFinder的博客 1420

JavaEE、Spring

使用纯注解定义bean//1、创建配置类代替配置文件@Configuration //代表配置文件@ComponentScan("com.itheima") //代表包扫描组件@ComponentScan({"com.itheima","com.ittest"}) //在多个包扫描组件//使用配置类代替配置文件}//2、定义beanSystem.out.println("注解开发");}}//3、使用bean//使用纯注解开发将不再需要applicatinContext文件。

飞翔的企鹅的博客 905

LVDS接口总结--(0)LVDS硬件电路接口

xilinx LVDS接口硬件总结

zidan1412的博客 9721

Spring 和 JavaEE的关系

为什么80%的码农都做不了架构师?>>> ...

weixin_33949359的博客 1350

[官方培训]22-UE资产优化 Epic 肖月 笔记

Nanite+Lumen目标:面向TA,美术,不影响视觉的前提下,优化运行和编辑效率引擎:UE5.1延迟管线平台:主流PC,Windows 10 with DX12。

Tcohneyn的博客 1575

什么!!!寒假就要准备暑期实习

介绍暑期实习,从作用,时间线,投递渠道,技术准备,常见问题,经验教训几个方面介绍暑期实习

今天不coding的博客 1726

JAVA和Spring的联系和区别

JAVA和Spring的联系和区别前置JavaSE(j2SE)Java EEjava出现的理由什么是Java EE-- (javaEE是一个开发分布式企业级应用的规范)javaEE包含的技术Spring什么是Spring——**Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架**java “VS” SpringjavaEE 与Spring的区别小结终极对比...

weixin_44684812的博客 1万+

基于Super-Jacoco的精准测试实践之路

灵魂拷问这个版本的影响范围到底有多大?研发改动了代码,为什么不通知测试?测试用例真的全面覆盖了吗?测试同学的测试覆盖情况该怎么评估?什么是精准测试概念借助技术手段、通过辅助算法对软件测试过...

咻咻ing的专栏 5841

JavaEE——Spring框架(1)

目录1.Spring的概念2.Spring Framework 的特点3.Spring体系结构3.1. Data Access/Integration(数据访问/集成)3.2. Web 模块3.3.Core Container(Spring 的核心容器)3.4. AOP、Aspects、Instrumentation 和 Messaging3.5. Test 模块4.Spring开发环境搭建5.IOC5.1 依赖注入(DI)5.2 IoC 的工作原理5.3 IoC 容器的两种实现6.Spring Bean定

威威的博客 2817

【AutoSAR】【EcuM】ECU状态管理

目录 一、EcuM架构位置 ​二、EcuM功能介绍 三、EcuM状态机 1.STARTUP阶段 2、UP状态 3、shutdown状态 4、休眠状态 5、OFF状态 一、EcuM架构位置 EcuM模块位于系统服务层,如下图红色方框里; 二、EcuM功能介绍 EcuM本身它管理着ECU在STARTUP, RUN,OFF,SLEEP,WAKEUP状态之间的相互切换。 责所有BSW的初始化以及去初始化 和ComM协作来管理网络状态,在需要时关闭ECU 管理所有的唤醒事件,并且在需要时

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3354

基于YOLO26/11/v8算法的Web目标检测系统,人脸表情识别系统,Django+Vue3 的前后端分离,实现摄像头实时识别,YOLO26/YOLO11/v8 + LLM大模型智能分析,科研必备

在人工智能迈向通用化(AGI)的今天,“视觉感知 + 语言理解”的多模态联合是未来的趋势。单纯的检测画框已经无法满足复杂的业务需求,如何让系统“看懂”画面并进行“思考”,是当前视觉项目的重点。我们知道目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。因此本项目将 YOLO 目标检测模型(兼容 YOLO26/v11/v8 系列)与 DeepSeek 等顶流大语言模型(LLM) 进行联合,使用 Django (后端) + Vue3 (前端) 技术栈

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2839

JavaEE-Spring相关

1.spring是什么 spring是轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(面向切面编程)为内核提供了展现层SpringMVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,逐渐成为使用最多的java ee企业应用开源框架 2.spring的优势 方便解耦,简化开发 通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合 AOP编程的支持 通过 Sprin

flashdog8的博客 194

AutoSAR系列讲解 - 前言

博主xyfx是一名汽车行业的嵌入式软件工程师,本职工作是同步电机的驱动控制(主要做FOC的,这个大家要是有兴趣,以后可以单独开一个专栏来讲解一下),由于做控制器的时候需要用到AutoSAR,所以特意的去学习了相关知识,同时博主自己也在同步提高中,有写的不合理的地方也请大家指正。我准备对AutoSAR开设两个大的方面来讲解,一是AutoSAR的入门篇,二是AutoSAR的实践篇,分别讲述AutoSAR的理论基础和工具的使用。

雪云飞星的博客 4万+

【Java教程】Day22-01 Spring框架

Spring 是一个轻量级的开源框架,旨在支持 Java EE 应用程序的快速开发。它为开发者提供了底层容器和基础设施,并且能够与众多常用的开源框架无缝集成,极大地简化了 Java 企业级应用的开发。因此,Spring 已成为开发 Java EE 应用程序不可或缺的工具。

max202011161630的博客 1022

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

spring-day01-概述-IOC

文章目录一、spring概述二、spring的EJB的区别(了解) 一、spring概述 spring 的 开源的轻量级框架 spring的两大核心:IOC ,AOP 二、spring的EJB的区别(了解) EJB可以说像是一个Web Service,但也不完全是,比如EJB将编写好的业务组件放置在EJB容器上,然后提供接口给客户端访问;但是功能不仅限如此,EJB标准中提供了很多规范等...

树叶子的博客 486

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring学习day01概述及IOC理论推导

Spring学习day01概述及IOC理论推导简介优点组成扩展Ioc基础分析实现Ioc本质转载至 简介 Spring:春天 Spring 使创建 Java 企业应用程序变得容易。它提供了在企业环境中使用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需要灵活地创建多种架构。从 Spring Framework 5.1 开始,Spring 需要 JDK 8+(Java SE 8+)并为 JDK 11 LTS 提供开箱即用的支持。建议将 Jav

qs_266的博客 154

Spring框架IOC详解

Spring框架学习01 spring框架的概述以及spring中基于XML的IOC配置 1. 什么是spring? 来自百度: Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非...

Jack 1617

Spring-day01 IoC

Spring-IoC1)Spring简介1.1)什么是框架1.2)框架的作用1.3)Spring是什么1.4)Spring的体系结构1.5)Spring的发展历史1.6)Spring优势2)IoC简介2.1)优质程序代码的制作原则2.2)耦合与内聚2.3)工厂模式发展史2.4)Spring发展历程2.5)IoC3)入门案例3.1)案例环境说明3.2)IoC入门案例制作步骤3.2.1)IoC入门案例制作步骤-13.2.2)IoC入门案例制作步骤-23.2.3)IoC入门案例制作步骤-33.2.4)IoC入门案

m0_46690280的博客 1134

Spring之 IOC 解决程序耦合(一)

Spring之 IOC 解决程序耦合(一)一、spring 概述1.spring 的概念2.spring 的体系结构二、控制反转-Inversion Of Control1.概念2.作用三、spring 的 IOC 解决程序耦合具体步骤1.导入jar坐标2.创建持久层接口和实现类3.创建业务层接口和实现类4.让 spring 管理资源,在配置文件中配置 service 和 dao5.编写测试类6.执行结果五、ApplicationContext的三个常用实现类:四、BeanFactory 和 Applica

sygg12345666的博客 409

黑马就业班——Spring框架:part1 -- Spring框架的概述以及Spring中基于XML的IOC配置

Spring的学习内容 spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的AOP配置 第四天:spring中的JdbcTemlate以及Spring事务控制 本文参考文档:《Spring5第一天.pdf》 本文代码项目:spring...

LKJgdut的博客 373

Spring框架day01-IoC基础及XML的配置

1. Spring概述 1.1 关于框架 框架的概念 框架:在这里特指软件框架,它是我们在实际开发中解决项目需求的技术集合。运用框架可以大大简化我们的代码编写,缩短开发周期。同时,对后续项目维护在面对开发团队人员更迭时降低了门槛,对系统升级提供灵活可控的标准。当然,框架提高了我们的开发效率,降低维护成本的同时,也要求我们在使用时遵循它的规范,要按照它的使用要求编写代码。最后,需要注意的是,它不是系统架构。 框架的作用 提高开发效率。 增强可重用性。 节约维护成本。 提供编写规范。 解耦底层

IT学院 439

DAY01_Spring—Spring框架介绍&IOC&Spring工厂模式

SSpring框架介绍、IOC、Spring工厂模式

m0_57075290的博客 1034

Spring 学习笔记 day01 Spring框架概述 IOC容器 Bean管理(基于xml)Bean的生命周期

Spring 学习笔记 day01Spring框架概述IOC容器IOC的概念和原理IOC操作 Bean 对象管理基于 xml 配置文件的 Bean 对象管理Bean 的作用域和 Bean 的生命周期使用 IOC 基于 xml 配置德鲁伊数据库连接池 Spring框架概述 Spring 是轻量级的开源的 JavaEE 框架 Spring 可以解决企业应用开发的复杂性 Spring 有两个核心部分:IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理 (2)Aop:面向切面,

yu1590的博客 205

Spring-Day01-IOC

1.关于单例多例说明 1.1 关于Spring容器对象创建说明 1.Spring容器中默认的对象都是单例对象(通过构造方法实例化对象) 2.有时需要通过多例对象为用户提供服务(数据源链接) 1.2 多例对象配置 <!--4.测试单例多例 通过scope属性控制对象的单例和多例 scope="prototype" 多例设置 scope="singleton" 缺省值 单例 --> <bean id="user" class="com.jt.pojo.U

qq_15740267的博客 186

SSM【Spring day01】

Spring 第一天第1章 Spring 概述1.1 spring 概述[了解]1.1.1spring 是什么1.1.2Spring 的发展历程1.1.3spring 的优势1.1.4spring 的体系结构第2章 IoC 的概念和作用2.1 程序的耦合和解耦[理解]2.1.1什么是程序的耦合2.1.2解决程序耦合的思路2.1.3工厂模式解耦2.1.4控制反转-Inversion Of Control第3章 使用 spring 的 IOC 解决程序耦合3.1案例的前期准备[会用]3.1.1准备 spring

hu_zhi_chao的博客 665

part1——初识spring(关键字:概念,程序的耦合及解耦,IOC,xml,properties)

知识点 spring概述spring发展历程spring的优势spring的体系结构 编写jdbc的工程代码用于分析程序的耦合 编译期依赖 目标 能够说出spring框架的优点 描述出spring框架的体系结构 知道代码编译期的依赖 1、spring概述——spring是什么,spring的两大核心,spring的优势,spring体系机构 2、程序的耦合及解耦——案例中问题,工厂模式解耦 3...

piaok_yumian的博客 546

Spring 框架基础教程(Day01)

先定义业务接口,再提供具体的实现类。// 定义一个用户服务接口// 实现用户服务接口// 提供 setter 方法用于依赖注入@OverrideSystem.out.println("开始保存用户信息...");// 定义用户数据访问接口// 实现用户数据访问接口@OverrideSystem.out.println("将用户信息保存到数据库...");在这段代码中,是业务接口,是其实现类,该实现类依赖于UserDao。UserDao是数据访问接口,是它的实现类。

weixin_41545189的博客 919
上一篇: Java高级_多线程_day02_线程安全问题
下一篇: Java框架_Spring5_day02_IOC
chipeize
博客等级 码龄10年 23粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值