【Spring实战】—— 2 构造注入
来源:互联网 发布:java 增量覆盖率 编辑:程序博客网 时间:2024/05/18 02:31
本文讲解了构造注入以及spring的基本使用方式,通过一个杂技演员的例子,讲述了依赖注入属性或者对象的使用方法。
如果想要使用spring来实现依赖注入,需要几个重要的步骤:
1 定义主要的类和需要分离的属性。这里主要的类,是指程序的主要对象,在例子中是Juggler杂技员。而想要分离构造的属性,是它手中的袋子的数目beanBags。
2 配置bean.xml。通过配置文件,确定主要的类和属性之间的关系,以及实现类。
3 通过应用上下文,获取bean,并进行使用。
注入属性
实例代码:
1 表演者接口:Performer.java
package com.spring.test.action1;public interface Performer { void perform() throws PerformanceException;}
2 杂技员:Juggler,继承了表演者接口
package com.spring.test.action1;public class Juggler implements Performer{ private int beanBags = 3; public Juggler(){ } public Juggler(int beanBags){ this.beanBags = beanBags; } public void perform() throws PerformanceException { System.out.println("Juggler "+beanBags+" beanBags"); }}
3 Spring配置文件:bean.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="duke" class="com.spring.test.action1.Juggler"> <constructor-arg value="15"/> </bean></beans>
4 应用上下文获取指定的bean
package com.spring.test.action1;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class test { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); Performer performer = (Performer)ctx.getBean("duke"); try { performer.perform(); } catch (PerformanceException e) { e.printStackTrace(); } }}
执行结果如下:
Juggler 15 beanBags
注入对象
1 例如,上面的杂技演员不仅仅会仍袋子,还会表演诗歌,那么诗歌这个对象就需要注入到表演者的构造函数中,可以如下表示会朗诵诗歌的杂技演员:PoeticJuggler
package com.spring.test.action1;public class PoeticJuggler extends Juggler{ private Poem poem; public PoeticJuggler(Poem poem){ super(); this.poem = poem; } public PoeticJuggler(int beanBags,Poem poem){ super(beanBags); this.poem = poem; } public void perform() throws PerformanceException { super.perform(); System.out.println("While reciting..."); poem.recite(); }}
2 诗歌对象:Sonnet29
package com.spring.test.action1;public class Sonnet29 implements Poem{ private static String lines = "嘛咪嘛咪哄"; public Sonnet29() { } public void recite() { System.out.println(lines); }}
3 Bean.xml配置文件如下
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="duke" class="com.spring.test.action1.Juggler"> <constructor-arg value="15"/> </bean> <bean id="sonnet29" class="com.spring.test.action1.Sonnet29"/> <bean id="poeticDuke" class="com.spring.test.action1.PoeticJuggler"> <constructor-arg value="15"/> <constructor-arg ref="sonnet29"/> </bean></beans>
4 主要的执行代码,通过应用上下文获取制定的bean
package com.spring.test.action1;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class test { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");// Performer performer = (Performer)ctx.getBean("duke"); Performer performer1 = (Performer)ctx.getBean("poeticDuke"); try {// performer.perform(); performer1.perform(); } catch (PerformanceException e) { e.printStackTrace(); } }}
5 执行结果如下
一月 24, 2015 4:40:46 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@35bf8de1: startup date [Sat Jan 24 16:40:46 CST 2015]; root of context hierarchy一月 24, 2015 4:40:46 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions信息: Loading XML bean definitions from class path resource [bean.xml]一月 24, 2015 4:40:46 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3401a0ad: defining beans [duke,sonnet29,poeticDuke]; root of factory hierarchyJuggler 15 beanBagsWhile reciting...嘛咪嘛咪哄
0 0
- 【Spring实战】—— 2 构造注入
- Spring依赖注入 — 构造器注入
- Spring依赖注入 — 构造器注入
- Spring—— 构造注入
- Spring 依赖注入——构造器注入
- spring注入:构造注入
- [Spring实战系列](7)Spring注入方式之构造器注入
- 【Spring实战】—— 5 设值注入
- 【Spring实战】—— 7 复杂集合类型的注入
- Spring实战笔记——运行时值注入
- Spring实战—复杂集合类型的注入
- spring中的依赖注入和控制反转(二)——Spring 设值注入和构造注入比较
- Java Web实战04--Spring之属性注入和构造器注入
- spring构造注入
- Spring 构造函数注入
- [ java ] Spring 构造注入!
- Spring构造注入
- spring构造器注入
- 我的JAVA笔记
- oracle数据备份与还原
- Android调试获取Log
- Android中如何实现文件下载
- Java反射概念思想
- 【Spring实战】—— 2 构造注入
- 更改printk打印级别
- 定位数据库死锁
- 【慕课笔记】5-1 四种XML解析方式大PK—四种解析方式的分析
- 继 <ZMQ的学习和研究> 学习代码 Multiple socket reader in C++
- CDOJ 1139 菲波拉契数制升级版 dp
- c语言词法分析器实验程序(c语言版)
- NATS学习 -- 概念学习之消息(Message)与发布订阅(Publish Subscribe)
- 字符编码