Spring小白到菜鸟修炼之基本概念(2)
来源:互联网 发布:单片机支持snmp协议 编辑:程序博客网 时间:2024/05/15 09:39
上篇文章讲到Spring可以使用xml文件配置或者注解方式来实现注入。这篇这篇博客打算继续讨论xml配置方式注入依赖的方式。
xml文件配置依赖注入方式有设值注入和构造注入两种方式。通过setter方法给Bean注入依赖关系的是设值注入,通过构造函数注入依赖关系的是构造注入。
下面看一看设值注入的简单实例
Axe类
package second;public interface Axe { public String chop();}
StoneAxe类
package second;public class StoneAxe implements Axe{ @Override public String chop() { return "石斧砍柴"; }}
Person 类
package second;public interface Person { public void useAxe();}
Chinese类
package second;public class Chinese implements Person{ private Axe axe; public void setAxe(Axe axe) { this.axe = axe; } @Override public void useAxe() { System.out.println(axe.chop()); }}
配置文件
<?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-3.0.xsd"> <!-- 设值注入的优缺点 优点 1 和JavaBean相似,容易理解 2 方便,性能相对较高(需要Bean的时候才去加载对应的Bean) 缺点 注入时期 当通过无参构造函数创建bean实例的时候,然后调用对应的setter方法注入依赖关系 --> <bean id="chinese" class="second.Chinese"> <property name="axe" ref="stoneAxe" /> </bean> <bean id="stoneAxe" class="second.StoneAxe" /></beans>
TestDemo2 类
package second;import java.util.Random;import java.util.UUID;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import third.Chinese;import third.SteelAxe;/** * 依赖注入方法 * (1) 设值注入 (2) 构造注入 */public class TestDemo2 { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "second.xml"); /** * 设值注入 * 通过setter方法为Bean注入依赖关系 */ Person p = context.getBean("chinese", Person.class); p.useAxe(); //输出 石斧砍柴 }}
接着,看看构造注入实例
Axe类
package third;public class SteelAxe implements Axe { @Override public String chop() { return "轮子"; }}
Person类
package third;public interface Person { public void useAxe();}
Chinese类
package third;public class Chinese implements Person { private Axe axe; public Chinese(Axe axe){ this.axe=axe; } @Override public void useAxe() { System.out.println(axe.chop()); }}
SteelAxe类
package third;public class SteelAxe implements Axe { @Override public String chop() { return "轮子"; }}
TestDemo3类
package third;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import third.Chinese;import third.SteelAxe;public class TestDemo3 { public static void main(String[] args) { /** * 构造注入 * 通过构造器注入依赖关系 */ ApplicationContext context = new ClassPathXmlApplicationContext( "third.xml"); Person p=(Person) new Chinese(new SteelAxe()); p.useAxe(); // 轮子 }}
这里写代码片
配置文件
<?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-3.0.xsd"><!-- 构造注入优缺点 优点 1 在构造器中决定依赖关系的注入顺序 缺点 1 笨重 注入时期 bean实例创建完成就完成依赖关系的注入 --> <bean id="chinese" class="third.Chinese"> <!--驱动Spring调用Chinese带一个参数的构造器来创建对象 --> <constructor-arg ref="steelAxe" /> <!--constructor-arg index="0" 指出参数的位置 type="java.lang.Integer" 指出参数类型 value="" 参数的值 ref="steelAxe" 依赖的bean /** * 构造注入常见知识点 */ 有时候在配置参数的时候,可以不指出参数的类型,Spring可以根据构造器来进行强制类型转换 public Chinese(String str, int n) 如果写成 <constructor-arg value="str" /> <constructor-arg value="23" /> 此时"23"会转换成23,但是如果有一下构造函数 public Chinese(String str, int n) public Chinese(String str, String str) 此时必须使用type来指出"23"是 int,不然"23"只会被认为是字符串 --> </bean> <bean id="steelAxe" class="third.SteelAxe" /></beans>
0 0
- Spring小白到菜鸟修炼之基本概念(2)
- Spring小白到菜鸟修炼之基本概念(1)
- 菜鸟学ASP.NET MVC 之 基本概念(2)
- 菜鸟修炼必经之道~
- 菜鸟的修炼之路
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Spring小白到菜鸟之Spring事件入门
- 菜鸟修炼记之起飞心
- 菜鸟学ASP.NET MVC 之 基本概念(1)
- 循序渐进之Spring AOP(2) - 基本概念
- 《菜鸟修炼之路(一)——MATLAB使用第一弹》
- Java程序员的修炼之路<1>菜鸟篇(1年)
- Spring(六)spring之AOP基本概念和配置详解
- 菜鸟修炼C语言小设计之——通讯录
- 【mysql 修炼之路】如何从菜鸟成为mysql 大神?
- Web Service修炼之二Xfire+Spring
- unity学习笔记之物体移动
- 编译预处理命令
- (数据结构)栈和堆区别
- lua笔记3,常用函数
- jsp访问数据库(完整总结)
- Spring小白到菜鸟修炼之基本概念(2)
- 大连ICPC总结【滚粗记】
- <学习笔记2>数据挖掘原理与运用-sql server2008 数据库
- NOIP 2005 等价表达式
- CNN学习笔记(1)稀疏连接和权值共享的理解
- 坚持与源动力
- 自定义仿ViewParger无限循环滑动界面
- HDU 5904 LCIS(dp)
- 客户端 用不用 bind 的区别