[Spring3.x源码]IoC(一)例子

本文通过一个简单的示例项目,详细介绍了Spring框架如何通过配置文件创建Bean实例并进行依赖注入的过程。包括Bean实例化的时机、使用Java反射机制创建bean实例的方式以及属性注入的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写bean(Hello.java)、配置文件(beans.xml)、调用端(TestSpring.java),项目中导入spring.jar、common-logging.jar包

1.Hello.java

public class Hello {
	private String name;	
	
	public Hello(){}
	
	public Hello(String args){
		name = args;
	}	
	public void setName(String name){
		this.name = name;
	}	
	
	public void println(){
		System.out.println("Hello " + name);
	}
}
2.beans.xml
<?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
    
<beans>   
	<bean name="hello" class="Hello">   
	    <constructor-arg>   
	        <value>World</value>   
	    </constructor-arg>   
	    <!-- 
	    <property name="name">
	    	<value>Spring</value>
	    </property>
	     -->
	</bean>
</beans>
3.TestSpring.java
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestSpring {
	public static void main(String[] args){
		AbstractApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
		Hello hello = (Hello)context.getBean("hello");
		hello.println();
	}
}
运行TestSpring,输出结果:Hello World
如果取消注释的部分则输出:Hello Spring
Spring根据配置文件中的参数,使用构造方法注入将World注入到Hello中,使用属性注入将Spring注入到Hello中。

那Spring源码中是什么时候创建hello实例,什么时候、怎么注入的?

1.先将beans.xml中的配置信息,保存到BeanDefinition的实例中。再将这些BeanDefinition放到DefaultListableBeanFactory的属性beanDefinitionMap中。发生在这一步:
AbstractApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");


2.getBean("hello");的时候就开始创建实例了。
使用Java反射机制创建bean实例,在SimpleInstantiationStrategy.instantiate(RootBeanDefinition beanDefinition, String beanName, BeanFactory owner)或者CglibSubclassingInstantiationStrategy.instantiate(Constructor ctor, Object[] args)方法中。


3.在BeanWrapperImpl.setPropertyValue(PropertyTokenHolder tokens, PropertyValue pv)中也是用java反射调用相关的方法进行设置return readMethod.invoke(object);而这个readMethod是从PropertyDescriptor.getReadMethod()取得的(里边有一行readMethodName = "get" + getBaseName();这里就明白了setter、getter方法要遵守规范了)。



、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值