Spring学习笔记之控制反转IOCxml模式

CAN:CANape使用Function处理数据 CANape中的function and script习惯称之为脚本(实际为函数和脚本)。这里介绍function,可以实现简单信号a和信号b乘法,比如计算功率(转速与扭矩乘)。该功能前期有专业人员做支援,当时问其编制方法,其回答是看帮助文件。现在没有支援自己动手。 功能描述:电压信号阶梯增加,每次保持1.5s,测量后0.5s位移平均值(假设信号步长10ms,需要取样50个点,但该脚本中点的数目为10个)。图示如下: 刚开始看了软件Function definition→Library function, 阅读详情

1、无参构造方法

xml文件中有bean的配置,而且这个bean所对应的java类中存在一个无参构造器,那么这个时候spring容器就可以使用反射调用无参构造器来创建实例了~

<?xml version="1.0" encoding="UTF-8"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
	xmlns:context="http://www.springframework.org/schema/context"
 
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
  <bean name="stu" class="com.x.spring.test1.Student">
      <property name="name">
          <value>张三</value>
      </property>
  </bean>
  
</beans>

第二种:通过工厂类获得实例(工厂类实现了接口FactoryBean<?>)

工厂类ConnectionFactory实现指定接口并且实现接口中的三个抽象方法:

public class ConnectionFactory implements FactoryBean<Connection>{
 
	private String driver;
	private String url;
	private String username;
	private String password;
 
	public String getDriver() {
		return driver;
	}
 
	public void setDriver(String driver) {
		this.driver = driver;
	}
 
	public String getUrl() {
		return url;
	}
 
	public void setUrl(String url) {
		this.url = url;
	}
 
	public String getUsername() {
		return username;
	}
 
	public void setUsername(String username) {
		this.username = username;
	}
 
	public String getPassword() {
		return password;
	}
 
	public void setPassword(String password) {
		this.password = password;
	}
 
 
    //连接
	@Override
	public Connection getObject() throws Exception {
		Class.forName(driver);
		Connection conn = 
			DriverManager.getConnection(url,username,password);
		return conn;
	}
 
	@Override
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return false;
	}
	
	@Override
	public Class<Connection> getObjectType() {
		// TODO Auto-generated method stub
		return Connection.class;
	}
}

配置文件factory.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"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
     
	
	<!-- 通过conn拿到的是对应的这个工厂类所生产的产品对象 -->
	<!-- 造成这种现象的原因:因为这个类ConnectionFactory是一个工厂类,所以我们用名字conn在容器中拿对象的时候,
    	拿到并不是这个工厂类对象,而是这个工厂类对象调用完工厂方法后所返回的对象. -->
	<bean name="conn" class="com.x.spring.test3.factory.ConnectionFactory">
	    <!-- 从一个配置文件中以key—value的形式拿value -->
		<property name="url" value="${url}"></property>
		<property name="driver" value="${driver}"></property>
		<property name="username" value="${username}"></property>
		<property name="password" value="${password}"></property>
	</bean>
	
     <!-- 
    	下面配置的这个类,可以自动的帮我们去读取指定的properties文件的
    	内容,文件中用key-value的形式存放数据,读完之后我们就可以用
    	${key}这种形式去拿文件中的value值了。
    	classpath指的是从src下面找.
      -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	  <property name="locations" value="classpath:mysql.properties"/>
	</bean>
</beans>

//还需要properties文件~我放在src目录下面~
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssh
username=root
password=root

 

测试类FactoryTest:

public class FactoryTest {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		//在xml中配置工厂类,然后通过这个工厂类获得工厂生产的实例
		try {
			String path = "com/x/spring/test3/factory/factory.xml";
			ApplicationContext container = 
					new ClassPathXmlApplicationContext(path);
			Connection conn = (Connection)container.getBean("conn");
			System.out.println(conn);
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
 
}

 

注意: 通过conn拿到的并不是要拿到工厂类的对象,而是对应的这个工厂类所生产的产品对象~这一点要记住

第三种:通过实例工厂获得实例(不需要实现或者继承任何接口或者父类) 

public class ConnectionFactory {
 
	private String driver;
	private String url;
	private String username;
	private String password;
	
	public Object getConnection() throws Exception {
		Class.forName(driver);
		Connection conn = 
			DriverManager.getConnection(url,username,password);
		return conn;
	}
	public String getDriver() {
		return driver;
	}
 
	public void setDriver(String driver) {
		this.driver = driver;
	}
 
	public String getUrl() {
		return url;
	}
 
	public void setUrl(String url) {
		this.url = url;
	}
 
	public String getUsername() {
		return username;
	}
 
	public void setUsername(String username) {
		this.username = username;
	}
 
	public String getPassword() {
		return password;
	}
 
	public void setPassword(String password) {
		this.password = password;
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
   <span style="color:#ff0000;"><!-- 读取properties文件 --></span>
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="classpath:mysql.properties"/>
	</bean>
    
    <bean name="factory" class="com.x.spring.test3.instanceFactory.ConnectionFactory">
   		<property name="url" value="${url}"></property>
		<property name="driver" value="${driver}"></property>
		<property name="username" value="${username}"></property>
		<property name="password" value="${password}"></property>
    </bean>
    
    <span style="color:#ff0000;"> <!-- 
		将来通过这个conn来拿对象,拿到的是名字为factory的工厂类调用完
		名字为getConnection方法之后所返回的对象。
	 --></span>
    <bean name="conn" factory-bean="factory" factory-method="getConnection"></bean>
    
</beans>

 

 

//测试
public class InstanceTest {
 
	public static void main(String[] args) {
		//通过实例工厂获得实例(不需要实现或者继承任何接口或者父类)
		try {
			String path = "com/x/spring/test3/instanceFactory/instanceFactory.xml";
			ApplicationContext container = 
					new ClassPathXmlApplicationContext(path);
			Connection conn = (Connection)container.getBean("conn");
			System.out.println(conn);
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

第四种:通过静态工厂获得实例

例如:含义静态方法的工厂类ConnectionFactory

public class ConnectionFactory {
	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3306/ssh";
	private static String username = "root";
	private static String password = "root";
	
	public static Object getConnection() throws Exception {
		Class.forName(driver);
		Connection conn = 
			DriverManager.getConnection(url,username,password);
		return conn;
	}
}

//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"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
     <!-- 这样配置一定要求getConnection方法是静态方法 -->
    <bean name="conn" class="com.x.spring.test3.staticFactory.ConnectionFactory" factory-method="getConnection"></bean>
    
</beans>

//test
public class StaticTest {
 
	public static void main(String[] args) {
		//通过静态工厂获得实例
		try {
			String path = "com/x/spring/test3/staticFactory/staticFactory.xml";
			ApplicationContext container = 
					new ClassPathXmlApplicationContext(path);
			Connection conn = (Connection)container.getBean("conn");
			System.out.println(conn);
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法 阅读详情

相关推荐

JasperReport制作行内容合并的表格

效果图: 实现思路一: 交叉表 另一个思路: 普通表格 缺点:无法实现内容 垂直居中显示 准备工作 一、数据准备 DROP TABLE IF EXISTS `address_item_sex_value`; CREATE TABLE `address_item_sex_value` ( `id` int(11) NOT NULL AUTO_INCREM...

weixin_34148456的博客 2468

Spring 源码解读:IOC 原理之控制反转

Spring 源码解读:IOC 实现原理阅读须知关于 IOC 阅读须知 买本 Spring 源码的书看!!!重要!!!重要!!!重要!!! Spring 源码阅读时,不要想着从头到尾把逻辑看懂,因为一块代码逻辑可能就设计非常多方面的内容,或者及其的复杂,学会取舍 Spring 源码要想自己编译需要 Gradle 或者像我一样开一个普通的 Java 项目,利用那个项目去找代码文件位置 看源代码,一定勤写笔记 关于 IOC ...

乐之终曲 707

UCIe相关开源项目记录

目前找到的和UCIe协议有关的5个开源项目,如果也有正在做的朋友,欢迎私信交流

m0_64102565的博客 823

Spring学习(一)-- Spring介绍、IoC、使用注解

#Spring 一、Spring Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架 非入侵 支持事务 构建一切 协调一切 连接一切(对应图中) 学习SpringBoot完全掌握Spring和SpringMVC Spring Boot:快速开发的脚手架,基于它快速开发单个微服务,例如连接数据库 —“约定大于配置” Spring Cloud:基于Spring Boot实现...

anticlql的博客 299

在 ABAP Push Channel 里玩转 Detached Client:用 Attach Handle 把 WebSocket 连接交接给业务逻辑

摘要:本文介绍了ABAP Push Channels (APC)中的Detached Client技术,该技术通过将WebSocket连接建立与后续处理分离,实现更高效的实时通信。核心流程包括创建连接、使用connect_and_detach交接连接、以及通过attach handle重新附着发送消息。文章还探讨了PCP协议和AMC技术在企业级推送场景中的应用,并通过示例代码展示了Detached Client的具体实现方式。这种设计解决了传统轮询的资源浪费问题,特别适用于生产线监控、客服系统等需要服务端主

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2314

豆包手机为什么能自己“玩手机”?原理是什么?豆包手机系统运行机制深度解析:读屏、抓取、推理链路全拆解

作为一个每天被前端 Bug 打醒的程序员,我这一阵子在关注“豆包手机”这个关键词,刷到的相关视频简直铺天盖地。朋友们,说句实话,我一开始也只是抱着“看看热闹”的心态,最近一位博主下面的内容,不是“它能做什么”,而是。如果你之前看过很多评测,这篇文章会给你完全不一样的视角。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1014

Spring精华知识

spring框架的基础内容,方便查阅,属于入门级别

benben044的专栏 1137

本地部署 OpenClaw:让 AI 真正“干活”的开源智能体,从核心概念到实战全流程

在大模型遍地开花的今天,我们早已习惯与 AI 聊天,但真正能**接管本地任务、自动化工作流**的“数字员工”却寥寥无几。OpenClaw 正是这样一款开源利器——它不仅是可本地运行的 AI 私人助理,更像一个“AI 操作系统内核”,能读写文件、执行终端命令、控制浏览器,所有数据本地存储,兼顾隐私与效率。而 Skills 作为它的标准化插件系统,更是让这份能力无限扩展。 本文将从核心概念拆解入手,再分系统给出**保姆级本地部署步骤**,包含环境准备、安装配置、技能安装与验证,甚至覆盖新手最易踩的坑,让你一次

ZhangJiqun&191cm&85kg 2501

Spring IOC与AOP的简单实现

IOC与AOP的简单实现IOCXML方式注解方式AOP传统Spring AOP动态代理代理类实现XML配置实现基于AspectJ的Spring AOP IOC XML方式 将Spring的核心依赖包全部通过maven导入 <!-- spring-core spring-beans spring-context spring-expression--> <!-- 这...

南孚 630

STM32F4 SPI FLASH(W25Q128)驱动详解(含DMA+完整读写擦除+低功耗)

本文实现了一款基于STM32 HAL库的SPI Flash驱动,以W25Q128为例,提供了完整的初始化、读写、擦除、ID读取等功能。驱动集成了DMA传输、超时保护、页对齐写入等特性,支持扇区擦除、整片擦除、页写入及跨页缓冲写入。代码结构清晰,易于移植到其他SPI Flash型号(如W25Q64、W25Q16等),适用于数据存储、固件升级、文件系统等嵌入式场景。

kevin1499的博客 96

【云原生】Docker可视化工具Portainer使用详解

Docker可视化工具Portainer使用详解

congge 1万+

spring 的ioc的xml和注解开发的比较

目录 前言 ioc的含义及概念 需要的开发环境 spring使用xml方式 spring使用注解方式开发 前言 在做springIOC和xml开发的时候,要掌握以下几点: 熟悉mvc框架 掌握Java基本语言 掌握发射 ioc的含义及概念 IOC: Inversion of Control(控制反转)。 控制反转:将对象的创建权反转给(交给)Spring。 需要的开发环境 需要导入的jar...

qq_38348645的博客 319

2025华为OD机试真题+全流程解析+备考攻略+面试技巧+机考经验分享+Java/python/JS/C++/C语言实现

本专栏包含华为 OD 机试最新的 A卷+B卷+C卷+D卷+E卷题库,为全网最全、最新题库,500+真题。每一篇文章都包含了题目描述、解题思路以及实现代码。同时免费提供最新的在线OJ 刷题系统。已有上百名小伙伴通过刷真题题库通过了华为od机考,拒绝一切形式的代考,替考行为!!!以下是本专栏详细内容介绍:本专栏提供在线OJ刷题系统:OJ题库OJ系统注册&使用教程:OJ使用教程其他专栏以及答疑介绍:50+ 高频面试手撕真题,已有上百位小伙伴高频认证。1:机试没过,半年的冷冻期。2:已经订阅过我专栏的同学,推荐新人

MISAYAONE的博客 2225

Spring之IOC(xml配置)

IOC( Inversion of Control ),控制反转,也叫依赖注入DI(dependency injection),是Spring框架Core模块提供的核心功能。“控制反转”:对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。“依赖注入”:获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。

zeo_123的博客 815

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

01-Spring5框架之IOC(xml)注入属性操作

01-Spring5框架之IOC(xml)注入属性操作

咸鱼老潘的编码生活 286

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring IoC_xml

Spring IoC Spring IoC 容器组件,可以完成对象的创建、对象的属性赋值、对象管理 Spring框架部署(IoC) 新建Maven工程 java web 添加Spring IoC依赖 core beans aop expression context <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> &lt

qq_17514043的博客 308

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Framwork_01

spring基础

qq_26240741的博客 381

Spring IOC 实现原理 - XML

Spring IOC 实现原理 IOC: Inversion of Control ,即 “控制反转” , 不是什么技术,而是一种思想。原先需要自行实例化的对象, 交给IOC容器去实现。那么控制反转,谁被控制? 谁被反转 ? 在传统的JavaSE程序中,直接在类的内部通过new关键字来创建对象的实例,是程序主动去创建依赖对象,而IOC有一个专门的容器,来创建这些对象,由IOC容器来控制对象的创建,依赖对象也是容器帮忙查找创建并进行注入,对象只是被动的接受,依赖对象的获取被反转了。它还有一个更加形象的名字叫

weixin_45942124的博客 184

spring--xml配置管理bean--IOC--DI--知识点总结

目录结构:和用到的jar包 springTest.java文件 package com.xie.controler; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApp...

qq_40612528的博客 232

ssh整合环境搭建和spring IoC-xml文件配置初体验

项目功能描述:一个表单提交用户名和密码注册提交到数据库中或者保存在文本文档中。由于是第一个spring项目,所以只是写一下自己怎么简单搭建环境和配置 用到的框架:struts2 、spring、hibernate 一、ssh基本环境搭建 1、导入包分析: 需要导入的包:(版本可不一样) (1)通用包(7个):   commons-dbcp2-2.1.jar commo

zlj1217的博客 443

IoC基于XML配置装配Bean详解

IOC概念 控制反转:就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。控制权转移带来的好处就是降低了业务对象之间的依赖程度。 依赖注入:DI 依赖注入是组装应用对象的一种方式,对象无需指导依赖来自何处或者依赖的实现方式。依赖对象通常只能通过接口了解所注入的对象,这样就能确保低耦合。 1.构造器注入 2....

别念茶茶 235

SSM框架下各种jar包的作用

我的项目: <!-- 版本信息,被后面使用 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source...

letgoDream的博客 1530

实习心得体会---SSM学习笔记之注解20190716

1、使用@ModelAttribute和@SessionAttributes传递和保存数据 SpringMVC支持使用@ModelAttribute和@SessionAttributes在不同的模型(model)和控制器之间共享数据。@ModelAttribute主要有两种使用方式,一种是标注在方法上,一种是标注在Controller方法参数上。 当@ModelAt...

letgoDream的博客 1460

实习心得体会---idea+SSM整合20190713

使用资料: https://blog.youkuaiyun.com/weixin_42747657/article/details/81160501 1,mysql 2,tomcat 3,idea 4,spring 5,springmvc 6,springmvc 7,mybatis 8,maven 步骤: 1,建立数据库 JDBC---执行流程--》bean-->dao-...

letgoDream的博客 1386

Spring整合JdbcTemplate实现增删改查--基于xml配置

总结:该项目没有使用mybatis框架,仅仅使用了spring,比较容易理解 可以改进一下,使用springmvc和mybatis。将其改进为web项目 1,导入需要引入的依赖:Spring ioc + JdbcTemplate+druid+ mysql。pom.xml内容 <?xml version="1.0" encoding="UTF-8"?> <projec...

letgoDream的博客 997

实习心得体会之JDBC操作21090712

##JDBC JAVA Database Connectivity java 数据库连接 为什么会出现JDBC SUN公司提供的一种数据库访问规则、规范, 由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。 我们的java程序只要使用sun公司提供的jdbc驱动即可。 ###使用JDBC的基本步骤 注册驱动 ...

letgoDream的博客 985
上一篇: SSM框架之SpringMvc之参数绑定之注解方法
下一篇: Spring学习笔记之基于XML的Bean装配详解(二)
iamlinuxasd
博客等级 码龄10年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值