Java框架_Spring5_day02_IOC

【基于51】红外寻迹智能小车 - 代码篇 这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。 阅读详情

目录

三、 使用 Spring 的 IOC 解决程序耦合

3.1 IOC 入门

3.1.1 导入依赖

3.1.2 ApplicationContext.xml 配置文件

3.1.3 创建 Service、Dao 接口以及对应的实现类

3.1.3 测试类

3.1.4 相关知识的拓展

3.1.5 id 和 name 的配置

3.2 实例化 Bean 的三种方式

3.2.1 采用无参数的构造方法方式实例化

3.2.2 采用静态工厂实例化的方式

3.2.3 采用实例工厂(非静态的)实例化的方式

3.3 Bean 的作用访问的配置:scope 的配置

3.4 Bean 的生命周期


三、 使用 Spring 的 IOC 解决程序耦合

官网:http://spring.io

下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring

3.1 IOC 入门

3.1.1 导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cpz</groupId>
    <artifactId>spring_ioc</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
    </dependencies>
    
</project>

3.1.2 ApplicationContext.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.xsd">
    <!--spring的ioc:由容器创建对象(底层:反射+工厂)
        bean:用来创建对象
            id:对象的唯一标识(名称)
            class:对象的创建路径(类型)
    -->

    <bean id="accountService" class="com.cpz.service.impl.AccountServiceImpl"></bean>
    <bean id="accountDao" class="com.cpz.dao.impl.AccountDaoImpl"></bean>

</beans>

3.1.3 创建 Service、Dao 接口以及对应的实现类

AccountService.java 接口

package com.cpz.service;

public interface AccountService {
    public void saveAccount();
}

AccountServiceImpl.java 实现类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AccountServiceImpl implements AccountService {
    AccountDao accountDao;

    public AccountServiceImpl() {
        System.out.println("AccountServiceImpl对象被创建了");
    }

    public void saveAccount() {
        System.out.println("执行AccountServiceImpl中的saveAccount方法!");
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountDao accountDao = (AccountDao) ac.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方法!");
    }
}

3.1.3 测试类

Main.java

package com.cpz.main;

import com.cpz.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        // 由spring创建对象(完成对象的解耦)
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 通过名称调用(通过spring容器中的id属性)(推荐)
        AccountService accountService = (AccountService) ac.getBean("accountService");
        // 通过类型调用(通过spring容器中的class属性)
        //AccountService accountService = (AccountService) ac.getBean(AccountServiceImpl.class);
        accountService.saveAccount();
    }
}

3.1.4 相关知识的拓展

       BeanFactory 才是 Spring 容器中的顶层接口。

       ApplicationContext 是它的子接口。

BeanFactory 和 ApplicationContext 的区别:

  • 创建的方式都表示单例对象。
  • 创建对象的时间点不一样。
  1. ApplicationContext:只要一读取配置文件,默认情况下就会创建对象。(立即加载)
  2. BeanFactory:什么时候使用什么时候创建对象。(延迟加载)

ApplicationContext 接口的实现类: 

(1)ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件 推荐使用这种 
(2)FileSystemXmlApplicationContext 
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。 
(3)AnnotationConfigApplicationContext
当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。 

3.1.5 id 和 name 的配置

       在 ApplicationContext.xml 文件中的 <bean> 标签中,我们使用 id 属性来作为容器中的唯一标识,这里还可以使用 name 属性来表示对相关类的引用。

       id中不能出现特殊字符(容器中的唯一标识),name中可以出现特殊的字符(表示引用)。

       可以指定多个name,之间可以用分号(“;”)、空格(“ ”)或逗号(“,”)分隔开,如果没有指定id,那么第一个name为标识符,其余的为别名; 若指定了id属性,则id为标识符,所有的name均为别名。如:

<bean name="alias1 alias2;alias3,alias4" id="hello1" class="com.zyh.spring3.hello.HelloWorld"> </bean>

       此时,hello1为标识符,而alias1,alias2,alias3,alias4为别名,它们都可以作为Bean的键值;

3.2 实例化 Bean 的三种方式

3.2.1 采用无参数的构造方法方式实例化

<!--创建Bean的三种方式 -->
<!-- 第一种方式:使用默认构造函数创建。
        在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。
        采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。
-->
<bean id="accountService" class="com.cpz.service.impl.AccountServiceImpl"></bean>

       由于入门案例中采用的就是无参构造方法的方式进行的实例化,所以这里不再阐述。

3.2.2 采用静态工厂实例化的方式

<!--第二种:采用静态工厂实例化的方式-->
<bean id="accountService" class="com.cpz.factory.StaticFactory" factory-method="getAccountService"></bean>

创建一个静态工厂类:

package com.cpz.factory;

import com.cpz.service.AccountService;
import com.cpz.service.impl.AccountServiceImpl;

public class StaticFactory {
    public static AccountService getAccountService(){
        return new AccountServiceImpl();
    }
}

3.2.3 采用实例工厂(非静态的)实例化的方式

    <!--第三种:采用实例工厂(非静态的)实例化的方式-->
    <bean id="instanceFactory" class="com.cpz.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>

       这里我们可以理解为:第一行的 <bean> 代表的是指向 InstanceFactory 类,第二行的 <bean> 中 factory-bean 代表的是创建了一个 instanceFactory 对象,并调用它的 getAccountService 方法。因为是非静态的,所以我们需要先将类实例化才能调用方法。

package com.cpz.factory;

import com.cpz.service.AccountService;
import com.cpz.service.impl.AccountServiceImpl;

public class InstanceFactory {
    public AccountService getAccountService(){
        return new AccountServiceImpl();
    }
}

3.3 Bean 的作用访问的配置:scope 的配置

Spring 创建这个类的时候,默认采用的单例的模式进行创建的。如果想去改变单例模式,需要通过scope进行配置。

Scope属性中有以下几个取值:

  • singleton:默认值,单例的。

  • prototype:多例的。

  • request:应用在web应用中,将创建的对象存入到request域中。

  • session:应用在web应用中,将创建的对象存入到session域中。

  • globalsession:应用在集群环境下使用。将创建的对象存入到全局的session中。

    <!-- bean的作用范围调整
        bean标签的scope属性:
        作用:用于指定bean的作用范围
        取值: 常用的就是单例的和多例的
            singleton:单例的(默认值)
            prototype:多例的
            request:作用于web应用的请求范围
            session:作用于web应用的会话范围
            global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session
    -->
    <bean id="accountService" class="com.cpz.service.impl.AccountServiceImpl" scope="prototype"></bean>

3.4 Bean 的生命周期

单例对象​

  • 出生:当容器创建时对象出生​
  • 活着:只要容器还在,对象一直活着​
  • 死亡:容器销毁,对象消亡​

总结:单例对象的生命周期和容器相同

多例对象​

  • 出生:当我们使用对象时spring框架为我们创建​
  • 活着:对象只要是在使用过程中就一直活着。​
  • 死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回收

总结:多例对象的生命周期和对象是否被使用有关。与容器是否被销毁无关。

开发场景:

       单例(常用):一般创建对象单例(例如Service对象、Dao对象,数据源的对象...)

       多例:如果 spring 创建数据库连接对象 Connection(每个线程使用的数据库连接对象是不同的,保证线程安全)

YOLOv8中的可变形卷积改进 | 从DCNv1到DCNv3的多位置替换可变形卷积保姆级实操 可变形卷积(Deformable Convolution)最早由Dai等人在2017年提出,其核心思想是在标准卷积操作的基础上,引入可学习的偏移量(offsets),使卷积核能够自适应调整其采样位置,从而增强模型对目标变形的感知能力。return x本文通过深入探讨可变形卷积在YOLOv8中的应用,详细介绍了DCNv1、DCNv2和DCNv3的原理和实现,并通过实验验证了其在目标检测任务中的有效性。未来,我们将继续探索更多优化策略和技术,提升YOLOv8模型的性能,以应对更复杂的目标检测任务。 阅读详情

相关推荐

LLM推理服务中的SLO感知调度优化实践

在AI服务架构中,服务级别目标(SLO)是衡量服务质量的核心指标,特别是在大型语言模型(LLM)推理场景下。SLO通常涉及TTFT(首token时间)、TPOT(每token生成时间)和端到端延迟等关键维度,这些指标直接影响用户体验和系统效率。传统FCFS调度策略由于缺乏SLO感知能力,在混合负载下往往导致资源利用率低下和SLO达标率骤降。通过引入基于模拟退火的动态调度算法和精准的延迟预测模型,可以实现对不同优先级请求的智能调度,显著提升GPU利用率和SLO达标率。这种技术方案特别适用于需要同时处理实时对话

weixin_42549154的博客 370

Spring之JdbcTemplate

Spring提供了一个模板来操作JDBC:JdbcTemplate,这个类中需要提供一个dataSource才能使用。 第一种方式:JdbcTemplate需要手工赋值,这里选择了注入,JdbcTemplate中的dataSource也需要手工赋值,也是用了注入的形式。 Domain: public class Account { private int id; private

1418

Pico-实时预览工具PreviewTool

Unity XR SDK与Preview Tool下载链接:SDK - Pico Developer Platform1、下载Preview Tool后,将PreviewTool的APK先安装在VR头显里2、在PC端打开Preview Tool.exe文件Window -> Package Manager -> Add package from disk,选择下载的pico sdk中的package.json(如下图),Open导入。Edit -> Project Settings,设置设备和安卓版本,如下

晴天下的大头娃娃 4251

Spring框架:简述Spring及基于Xml的IOC配置

本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。 Spring概述 什么是spring Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:控制反转)和AOP(Aspect Oriented Programmaing:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业...

qq_43138206的博客 547

【计算机视觉】基于复杂环境下的车牌识别

本文针对复杂环境下(光照变化、车牌变形、噪声干扰)的车牌识别问题,提出了一套完整的优化方案。通过四个核心环节进行改进:1)采用CLAHE、同态滤波等技术优化光照处理;2)使用边缘检测和透视变换应对车牌变形;3)结合中值滤波和暗通道去噪算法消除干扰;4)改进字符分割与识别方法。文章提供了详细的Python实现代码,展示了从预处理到字符识别的完整流程,并通过多策略融合显著提升了复杂场景下的识别准确率。实验结果表明,该方法能有效应对各类复杂环境挑战,为实际应用提供了可靠解决方案。

2401_84149564的博客 1627

间充质干细胞衰老机制与抗衰老干预策略研究

干细胞技术在再生医学领域具有广阔应用前景,其中间充质干细胞(MSCs)因其多向分化潜能和免疫调节特性备受关注。细胞衰老是影响干细胞治疗效果的共性难题,表现为增殖能力下降、端粒缩短等特征。通过表观遗传学分析发现,衰老MSCs存在DNA甲基化异常和组蛋白修饰改变;线粒体功能障碍导致ATP产量锐减,ROS累积显著增加。针对这些机制,研究者开发了包括小分子化合物筛选、CRISPR基因编辑和三维培养优化在内的多种干预策略。这些技术在组织修复、抗衰老治疗等应用场景中展现出重要价值,例如可提升心肌梗死修复效率2.3倍,缩

weixin_33502772的博客 228

spring框架入门第二天

时间:2019年5月6日 spring基于注解的spring IOC 配置 基于注解的spring IOC 配置 import com.itheima.dao.IAccountDao; import com.itheima.service.IAccountService; import org.springframework.stereotype.Service; import javax.an...

Daniel丶 325

反向代理的隐形陷阱:为何你的HTTPS请求会降级为HTTP?

本文深入探讨了Nginx反向代理中HTTPS降级为HTTP的隐形陷阱及其安全风险,分析了五大降级诱因,包括协议信息丢失、重定向配置错误等,并提供了完整的防御性配置方案和实战指南,帮助开发者确保Web应用的安全性。

kotlin6android的博客 453

记一次SpringBean.xml配置问题

参差荇菜,左右流之 ©Zi10ng 今天第一次学习spring,在配置bean.xml的时候花了好多时间 ApplicationContext常用的有三个实现类,分别是 1. ApplicationContext ap = new ClassPathXmlApplicationContext("String location") 加载类路径下的配置文件,要求配置文件必须在类路径下 2. Ap...

王星星 1730

【LPDDR4 - 学习二】LPDDR4 介绍 ——LPDDR4 芯片引脚说明解析

本文系统解析了LPDDR4内存芯片的引脚定义与特性,重点介绍了272球POPFBGA封装的双通道架构。内容涵盖电源管理(三级供电架构与上电时序)、控制信号(差分时钟与复用命令总线)、数据接口(16位双向数据总线与选通信号)以及校准复位等核心模块。通过表格详细列明了各引脚电压范围、功能定义及工程注意事项,并附有典型封装球位分布图。全文基于JEDEC标准,为移动设备内存设计提供全面的硬件参考,特别强调电源时序控制、信号完整性及抗干扰设计等关键点。

zap15622077817的博客 2640

vscode 配置 codeql

vscode 配置 codeql

SHELLCODE_8BIT的博客 1439

spring01_ioc_基于xml的配置

1.pom.xml文件配置 2.目录结构 3.配置文件 4.service public class AccountServiceImpl implements AccountService { private AccountDao accountDao = new AccountDaoImpl(); @Override public void saveAccount() { accountDao.saveAccount(); } } .

jktryagain的博客 148

基于OpenClaw的AI数字员工协同团队架构设计

随着大型语言模型从被动的文本生成器向具备自主规划与执行能力的智能代理演进,企业级人工智能的应用范式正在发生根本性转变。在这一演进过程中,OpenClaw(前身为Clawdbot及Moltbot)作为一种开源的、本地优先的个人AI智能体网关基础设施,凭借其对持续内存、多通道接入以及沙盒化工具执行的原生支持,迅速成为构建“始终在线”数字劳动力的核心框架 1。然而,将单体个人助理扩展为能够处理复杂业务逻辑、支持跨组织协同并严格保障数据隔离的多智能体(Multi-Agent)团队,绝非简单的API拼接。系统架构必须

形上得其象,形下合于数;阴阳自济,玄理自明。 1047

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15】—— Spring框架1

百日闭关修炼,每日三道高频面试题。一起冲进大厂!看什么看?快上车!

陈哈哈的菜园子 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

CGB2110-DAY02-Spring-IOC

1. Spring框架学习 1.1 Spring介绍 Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合

qq_16804847的博客 9101

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Java教程】Day22-02 Spring框架:IoC容器

容器(Container)是一个为特定组件的运行提供支持的软件环境。以 Tomcat 为例,它是一个 Servlet 容器,负责为 Servlet 提供运行环境;类似 Docker 这样的技术,也可以被看作是一种容器,它为特定的 Linux 进程提供了所需的 Linux 环境。

max202011161630的博客 744

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring框架IOC详解

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

Jack 1617

【Java教程】Day22-01 Spring框架

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

max202011161630的博客 1022

【Java教程】Day22-02 Spring框架:IoC容器——原理

IoC(Inversion of Control)即控制反转。简单来说,IoC指的是将对象创建与对象间的依赖关系的控制权从程序本身转交给容器管理。为了理解IoC的概念,我们首先来看一个常见的Java应用组件是如何协作的。

max202011161630的博客 605

Spring学习day02(基于注解的IOC配置、Spring整合Junit)

前言 建议先看上篇文章(Spring学习day01)点击访问 首先复习一下之前的Spring基于xml的IOC配置(通过一个案例),这里需要说明的是:spring的IOC并不能实现持久层的操作,而是能够将应用程序的配置和依赖性规范与实际的应用程序代码分开(控制反转),通过IOC将持久层的操作进行解耦,能优化整个操作。 一、案例:使用spring的IoC的实现账户的CRUD 通过spring的IOC...

qq_34504626的博客 344

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

day02 spring-ioc

spring之ioc

Libra_97的博客 479

Java框架_Spring5_day01_Spring概述、耦合、IOC

目录 一、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...

cpz 276

CGB2111-Day02-Spring学习

springIOC入门

qq_16804847的博客 1万+

Java框架_Spring5_day04_IOC(DBUtils)

目录 五、基于注解的 IOC 配置 六、使用 Spring 的 IOC 实现账户的CRUD 6.1 使用 XML 配置 IOC 6.2 使用注解配置 IOC 五、基于注解的 IOC 配置 以下注解是用于创建对象的​,他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的 (1)@Component: 作用:用于把当前类对象存入spr...

cpz 176

Day122.Spring概述、IOC与DI -Spring

一、框架:半成品软件 高度抽取可重用代码的一种设计;高度的通用性; 书城:WebUtils.java;BaseServlet;Filter… 打包:bookstore.jar;(工具类)commons-fileupload,commons-io(工具类),commons-dbutils(方便操作数据库的工具) 框架:抽取成一种高度可重用的;事务控制,强大的servlet,项目中的一些工具。…是多个可重用模块的集合,形成某个领域的整体解决方案; 二、Spring 1、Spring概述 ①Spring是一个开源

阿昌爱Java 846
上一篇: Java框架_Spring5_day01_Spring概述、耦合、IOC
下一篇: Java框架_Spring5_day03_DI
chipeize
博客等级 码龄10年 23粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值