Web Technology 2 3 public class Greeting public void greet( public class Greeting public void greet public Speaker s Speaker s= public Greeting (speaker s Speaker s= new (Speaker)context. lookup Speaker() (ejb/Speaker); thiss=s s say Hello(; s sayHello(; public void greet s sayHello( 未使用容器 使用EJB容器 SPR|NG容器 由用户代码控制对象的生命周期 把对象的生命周期和对象间的 关系的控制交给容器
Web Technology 11 未使用容器 1 public class Greeting{ public void greet() { Speaker s = new Speaker(); s.sayHello(); } } 使用EJB容器 2 public void greet() { Speaker s = (Speaker)context.lookup ("ejb/Speaker"); s.sayHello(); } SPRING容器 3 public class Greeting { public Speaker s; public Greeting(Speaker s) { this.s = s; } public void greet() { s.sayHello(); } } 由用户代码控制对象的生命周期 把对象的生命周期和对象间的 关系的控制交给容器
Web Technology Bean Factory org. springframework beans package org. springframework beans. factory =0 BeanFactory F FACTORY BEAN PREFIX: String o containsBean(String) getAliases(String) ● getBean( string) getBean(String, Clas ● getType( string) isPrototype(String) ● issingleton(String) isTypeMatch(String, Class)
Web Technology 12 Bean Factory ▪ org.springframework.beans package ▪ org.springframework.beans.factory
Web Technology XML Configuration File Beans. xml <?xml version=1.0?> <!DOCTYPE beans PUBLIC l-//SPRING//DTD BEAN//EN http://www.springframeworkorg/dtd/spring-beans.dtd> <beans> <bean id="messageDisplay ' class="test. SystemoutMessageDisplay"></bean> <bean id= messageProducer class=test. HelloMessage Producer"></bean> <bean id=WhelloApp class=test HelloApp> <property name=display> <ref local="messageDisplay "/ </property> <property name=producer"> <ref local="messageProducerl/> </pr。 perty> </bean> </beans>
Web Technology 13 XML Configuration File <?xml version="1.0" ?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="messageDisplay" class="test.SystemOutMessageDisplay"></bean> <bean id="messageProducer" class="test.HelloMessageProducer"></bean> <bean id="helloApp" class="test.HelloApp" > <property name="display"> <ref local="messageDisplay" /> </property> <property name="producer"> <ref local="messageProducer" /> </property> </bean> </beans> Beans.xml
Web Technology Bean Factory Example public class Test i public static void main(string[] args)( BeanFactory factory new XmlBeanFactory new ClassPathResource("/Beans. xml")) HelloApp helloApp =(HelloApp) factory. getBean("helloApp")i helloApp display producedMessage o)i Now using this style more Application Context context =new File SystemXmlApplication Context( application Context. xml); Greeting greeting =(Greeting) context. getBean("Greeting");
Web Technology 14 Bean Factory Example public class Test { public static void main(String[] args) { BeanFactory factory = new XmlBeanFactory( new ClassPathResource("/Beans.xml")); HelloApp helloApp = (HelloApp) factory.getBean("helloApp"); helloApp.displayProducedMessage(); } } ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml"); Greeting greeting = (Greeting) context.getBean("Greeting"); Now using this style more
Web Technology Spring IOC容器 容器:容纳对象,并维护各个对象之间的关系 通过配置文件管理对象间关系 创建由容器完成 “注入”(对象关系的建立)也由容器完成 Dependent Injection 实现解耦合,可复用,类功能单一等良好的oo编码规范 非入侵式框架 侵入式框架:一组类与对象按照既定的规则交互。如果需要使用框架的功 能,用户必须实现框架的接口。于是代码与框架耦合,可移植性降低。 public class xxx implements EJBHomet create
Web Technology 15 Spring ▪ IOC容器 - 容器:容纳对象,并维护各个对象之间的关系 ▪ 通过配置文件管理对象间关系 ▪ 创建由容器完成 ▪ “注入”(对象关系的建立)也由容器完成 ▪ Dependent Injection - 实现解耦合,可复用,类功能单一等良好的OO编码规范 - 非入侵式框架 ▪ 侵入式框架: 一组类与对象按照既定的规则交互。如果需要使用框架的功 能,用户必须实现框架的接口。于是代码与框架耦合,可移植性降低。 public class xxx implements EJBHome{ create(){} ……. }