Spring Ioc(控制反转/依赖注入)

本文详细介绍了Spring框架中的IoC容器如何管理和注入不同类型的Bean。覆盖了基本数据类型、引用数据类型、集合属性及null和空字符串的注入方式,并展示了如何利用p命名空间简化配置,以及通过注解实现IoC。

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

原始基本数据类型注入:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  6.     <!--bean元素声明需要Spring创建的实例, id为实例对象的名称,class为指定实例的类型 -->  
  7.     <bean id="helloSpring" class="cn.lilin.helloSpring.HelloSpring" p:who="Spring"></bean>  
  8.       
  9. <!-- property为实例的属性赋值,name为属性名,此处实际是调用set方法 -->  
  10.         <property name="who">  
  11.             <value>Spring</value>  
  12.         </property>  
  13. </beans>  


原始引用数据类型注入:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xsi:schemaLocation="  
  5.     http://www.springframework.org/schema/beans  
  6.     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  7.   
  8.       
  9.     <!--bean元素声明需要Spring创建的实例, id为实例对象的名称,class为指定实例的类型 -->  
  10.     <bean id="userDaoImpl" class="cn.lilin.dao.user.impl.UserDaoImpl"></bean>  
  11.   
  12.     <bean id="userServiceImpl" class="cn.lilin.service.user.impl.UserServiceImpl"  
  13.         <!-- property为实例的属性赋值,name为属性名,此处实际是调用set方法-->  
  14.         <property name="dao" ref="userDaoImpl"></property>  
  15.     </bean>   


内部Bean:

[html]  view plain  copy
  1. <bean id="userServiceImpl" class="cn.lilin.service.user.impl.UserServiceImpl"  
  2.         <!-- 内部Bean-->  
  3.         <property name="dao">  
  4.             <bean class="cn.lilin.service.user.impl.UserServiceImpl"></bean>  
  5.         </property>  
  6.     </bean>   

集合属性和null、空字符串的注入:

[html]  view plain  copy
  1. <bean id="userServiceImpl" class="cn.lilin.service.user.impl.UserServiceImpl"  
  2.     <property name="dao">  
  3.         <list>  
  4.             <value>111</value>  
  5.             <value>222</value>  
  6.             <value>333</value>  
  7.         </list>     
  8.           
  9.         <set>  
  10.             <value>111</value>  
  11.             <value>222</value>  
  12.             <value>333</value>  
  13.         </set>      
  14.           
  15.         <map>  
  16.             <entry>  
  17.                 <key><value>key1</value></key>  
  18.                 <value>111</value>  
  19.             </entry>  
  20.             <entry>  
  21.                 <key><value>key1</value></key>  
  22.                 <value>222</value>  
  23.             </entry>  
  24.         </map>  
  25.         <!-- 如果map中的的键或值是Bean对象,可以将<value>换成<ref> -->   
  26.           
  27.         <props>  
  28.             <prop key="key1">111</prop>  
  29.             <prop key="key2">222</prop>  
  30.             <prop key="key3">222</prop>  
  31.         </props>  
  32.         <!-- key和value通常是字符串类型 -->  
  33.           
  34.           
  35.         <!-- 注入null -->  
  36.         <property name="dao"><null/></property>  
  37.         <!-- 注入空字符串 -->  
  38.         <property name="dao"><value></value></property>  
  39.     </property>  
  40. </bean>  



p命名空间注入普通数据类型:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:p="http://www.springframework.org/schema/p"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  7.     <!-- p命名空间简化属性的赋值,引用类型用:p:属性名-ref="Bean的id" -->  
  8.     <bean id="helloSpring" class="cn.lilin.helloSpring.HelloSpring" p:who="Spring"></bean>  
  9. </beans>  


p命名空间注入引用数据类型:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:p="http://www.springframework.org/schema/p"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  7.     <!-- p命名空间简化属性的赋值,引用类型用:p:属性名-ref="Bean的id" -->  

[html]  view plain  copy
  1.   
[html]  view plain  cop
  1. <bean id="userDaoImpl" class="cn.lilin.dao.user.impl.UserDaoImpl"></bean>  
  2. <bean id="userServiceImpl" class="cn.lilin.service.user.impl.UserServiceImpl" p:dao-ref="userDaoImpl"></bean>   
[html]  view plain  copy
  1. </beans>  



使用注解实现Ioc:
@Repository("userDao")//用于标注DAO类
@Service("userService")//用于标注业务类
@Controller//用于标注控制器类
@Scope("..")//设置Bean作用域

@Autowired//spring注入,容器会查找与属性类型相匹配的Bean组件,类中可以省略属性相关的setter方法,@Autowired(required=false)标识依赖不是必须的,找不到Bean组件也不会抛异常,默认为true
@Qualifier("userDao")//指定所需Bean的名称
private UserMapper userMapper;//声明UserMapper接口引用

   
Java标准注解:
@Resource(name="userDao")//指定所需Bean的名称,如果没有指定name,将根据属性名或者setter方法名,找不到再按照类型匹配的方式进行装配
private UserMapper userMapper;//声明UserMapper接口引用



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.1.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<!-- 扫描包中用注解标注的类 -->
	<context:component-scan base-package="cn.mySmbms.dao,cn.mySmbms.utils"></context:component-scan>



 




一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 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、付费专栏及课程。

余额充值