




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
spring:业务层框架,管理bean的,核心组件是容器。spring方式打印helloworld业务类:GreetingService.javapackage com.spring.demo.spring1;/* * author xuyh * date 2013-6-18 下午11:16:06 * version v1.0 * description 问候服务类 */public class GreetingService private String greeting;public String getGreeting() return greeting;public void setGreeting(String greeting) this.greeting = greeting;public void sayHello() System.out.println(hello: + greeting);maven配置文件: pom.xml4.0.0com.spring.demospring10.0.1-SNAPSHOTjarspring1UTF-8junitjunit4.11org.springframeworkspring-core3.1.4.RELEASEorg.springframeworkspring-beans3.1.4.RELEASEorg.springframeworkspring-aop3.1.4.RELEASEorg.springframeworkspring-context3.1.4.RELEASESpring 配置文件:ApplicationContext.xml测试类 : GreetingServiceTestpackage com.spring.demo.spring1;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class GreetingServiceTest /* 传统方式打印helloworld */Testpublic void testSayHello() GreetingService gs = new GreetingService();gs.setGreeting(xuyh);gs.sayHello();/* spring方式打印helloworld */Testpublic void testSayHelloSpring() BeanFactory bf = new ClassPathXmlApplicationContext(ApplicationContext.xml);GreetingService gs = (GreetingService) bf.getBean(greetingService);gs.sayHello();更多的属性或对象package com.spring.demo.spring1;/* * author xuyh * date 2013-6-18 下午11:16:06 * version v1.0 * description 问候服务类 */public class GreetingService private String greeting;private String greeting2;private ByeService byeService;public String getGreeting() return greeting;public void setGreeting(String greeting) this.greeting = greeting;public void sayHello() System.out.println(hello: + greeting);public String getGreeting2() return greeting2;public void setGreeting2(String greeting2) this.greeting2 = greeting2;public void sayHello2() System.out.println(hello: + greeting2);public ByeService getByeService() return byeService;public void setByeService(ByeService byeService) this.byeService = byeService;public void sayGreetingBye()byeService.sayBye();package com.spring.demo.spring1;/* * author xuyh * date 2013-6-18 下午11:16:06 * version v1.0 * description 欢送服务类 */public class ByeService private String bye;public String getBye() return bye;public void setBye(String greeting) this.bye = greeting;public void sayBye() System.out.println(bye: + bye);package com.spring.demo.spring1;import org.junit.BeforeClass;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class GreetingServiceTest /* 传统方式打印helloworld */Testpublic void testSayHello() GreetingService gs = new GreetingService();gs.setGreeting(xuyh);gs.sayHello();static BeanFactory bf = null;BeforeClasspublic static void before() /整个类只运行一次bf = new ClassPathXmlApplicationContext(ApplicationContext.xml);/* spring方式打印helloworld */Testpublic void testSayHelloSpring() GreetingService gs = (GreetingService) bf.getBean(greetingService);gs.sayHello();gs.sayHello2();/* spring方式打印第二个类ByeService */Testpublic void testSayByeSpring() ByeService bs = (ByeService) bf.getBean(byeService);bs.sayBye();/* spring类依赖 */Testpublic void testSayGreetingByeSpring() GreetingService gs = (GreetingService) bf.getBean(greetingService);gs.sayGreetingBye();spring IOC1 ioc:inverse of coutrol,控制反转,获得依赖对象的方式反转了。a. new 由spring完成b. set组装对象由spring完成。并且顺序相反了。即不必先初始化被依赖类。c. DI: dependency injection,依赖注入2. Bean工厂 BeanFactory:创建各种类型的Bean,功能单一,只能组装对象;Bean工厂只把Bean的定义信息载进来,用的时候才去实例化。BeanFactory bf = new XmlBeanFactory(new FileInputStream(“bean.xml”);这样可以节省资源。当资源有限,如手机等,可以用BeanFactoryApplicationContext:应用上下文,除了BeanFactory的DI功能外,还有系统架构的服务。它也不是实例化所有的Bean,它只加载所有的单例Bean。使用bean元素的scope=”singleton”;与之相对的是scope=”prototype”即原型Bean;spring的单例与java设计模式单例是不一样的。Spring单例是逻辑上约束的,java设计模式是物理约束的。Application:1、 提供文本信息解析工具2、 提供载入文件资源的通用方法,如图片3、 可以向注册为监听器的Bean发送事件在很少情况下使用BeanFactory如在移动设备。它有三种经常使用的实现:1、 ClassPathXmlApplicationContext 类路径中加载2、 FileSystemXmlApplicationContext 系统文件3、 XmlWebApplicationContext 在web环境中加载将bean从工厂中删掉有两种方法:1) 若bean实现了DisposableBean接口,distroy()方法被调用。2) 在bean元素中配置 destroy-method=mdes 则该方法将在bean销毁是调用。另外,可以使用获得应用上下文的引用:public class GreetingService implements BeanNameAware,BeanFactoryAware,ApplicationContextAware.Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException System.out.println(setApplicationContext():+applicationContext);生命周期图例:其实初始化与销毁有两种方法,一种是配置,一种是实现接口,推荐前一个,更为轻量。InitializingBean/init-methodDisposableBean/destroy-method两者不冲突,共存时接口为先。scope=”singleton|prototype|request|session|global session”前两者常用,后三者为web中的范围。生命周期bean被载入到容器时,他的生命周期就开始了。bean工厂在一个bean可以使用前完成很多工作:1) 容器寻找bean的定义信息并实例化。2) 使用依赖注入,spring按bean定义信息配置bean的所有属性。3) 若bean实现了BeanNameAware接口,工厂调用bean的setBeanName()方法传递bean的ID。4) 若Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。5) 若BeanPostProcessor和bean关联,则它们的postProcessBeforeInitialization()方法被语源。6) 若bean指定了init-method方法,则它将被调用。7) 最后,若有BeanPostProcessor和bean关联,则它们的postProcessAfterInitialization()方法被调用。解释:1) 实例化,测试在空的构造函数中打印:new GreetingService()2) DI注入:测试在三个set方法中打印:DI: setGreeting():gaopanDI: setGreeting2():tomDI: setByeService():com.spring.demo.spring1.ByeService289d2e3) BeanNameAware:如果想获取bean的id的话:public class GreetingService implements BeanNameAware.Overridepublic void setBeanName(String name) System.out.println(BeanNameAware setBeanName():+name);BeanNameAware setBeanName():greetingService4) BeanFactoryAwar:Bean工厂关注,如果想获取BeanFactory的引用,当使用此接口public class GreetingService implements BeanFactoryAware.Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException System.out.println(BeanFactoryAware setBeanFactory:+beanFactory);BeanFactoryAware setBeanFactory:org.springframework.beans.factory.support.DefaultListableBeanFactory401369: defining beans greetingService,byeService; root of factory hierarchy5) BeanPostProcessor:Bean后处理器,用于对Bean进行批处理。类似于web中的过滤器Filter。/* * author xuyh * date 2013-6-20 下午11:21:39 * version v1.0 * description Bean的后处理器 */public class MyBeanPostProcessor implements BeanPostProcessor /* * 前置后处理器 */Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException System.out.println(postProcessBeforeInitialization():+beanName);return bean;/* * 后置后处理器 */Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException System.out.println(postProcessAfterInitialization():+beanName);return bean;.postProcessBeforeInitialization():byeServicepostProcessAfterInitialization():byeService.postProcessBeforeInitialization():greetingServicepostProcessAfterInitialization():greetingService.可见后处理器对所有的Bean进行后处理。使用场景:对于集合的初始化6) 调用bean的定制的初始化方法init-method如果bean配置了init-method方法,则会在后处理器的前后之间被调用。public class GreetingService implements BeanNameAware,BeanFactoryAware.public void init()System.out.println(init().);.postProcessBeforeInitialization():greetingServiceinit().postProcessAfterInitialization():greetingService7) 调用后处理方法 after注解方式的后处理器LifeCycle.javapackage com.spring.demo.spring_anno;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;/* * author xuyh * date 2013-6-22 下午5:12:11 * version * description 生命周期 */public class LifeCycle /* * 注解方式实现 初始化方法的后处理操作 */PostConstructpublic void init()System.out.println(GreetingService.init().);/* * 注解方式实现消毁之前的后处理操作 */PreDestroypublic void destroy()System.out.println(GreetingService.destroy().);ApplicationContext.xmlListCycle.java/* * */package com.spring.demo.spring_anno;import static org.junit.Assert.*;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/* * author xuyh * date 2013-6-22 下午5:13:48 * version * description */public class LifeCycleTest static ApplicationContext ac = null;/* * throws java.lang.Exception */BeforeClasspublic static void setUpBeforeClass() throws Exception ac = new ClassPathXmlApplicationContext(ApplicationContext.xml);/* * throws java.lang.Exception */AfterClasspublic static void tearDownAfterClass() throws Exception ClassPathXmlApplicationContext cpxac = (ClassPathXmlApplicationContext)ac;cpxac.close();Testpublic void test() 注意:两个注解:PostConstruct和PreDestroy 是由javaee5提供的,因此需要加入javaee5的相关类库javaeejavaee-api5内部Bean如果一个类中引用另一个类,而被引用的类无须被其他类引用,此时可以配置为内部bean配置文件bean元素的继承Person.javapublic class Person private String name;private Integer age;public String getName() return name;public void setName(String name) = name;public Integer getAge() return age;public void setAge(Integer age) this.age = age;Overridepublic String toString() return Person name= + name + , age= + age + ;ApplicationContext.xmlPersonTest.javapackage com.spring.demo.spring1;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年5G网络对视频通话质量的影响
- 美容仪器行业2025年市场拓展策略报告:技术创新与推广策略分析
- 2025年民营经济相关题库及答案
- 新型合金材料在高压工况下的焊接变形抑制技术突破
- 2024-2025学年高中生物 专题3 植物的组织培养技术 课题2 月季的花药培养说课稿 新人教版选修1
- 数字孪生技术在交直流卷门机故障预判中的虚实映射精度验证
- 循环经济视角下的废旧刀片梯次利用技术路径
- 循环经济背景下餐饮用木制刀板全生命周期碳足迹核算体系构建
- 建筑幕墙刮窗器与光伏一体化安装的力学耦合效应分析
- 废旧刮锈刀材料回收的闭环产业链构建路径探索
- 人力资源知识竞赛题库及答案
- 地铁轨道安全培训报道课件
- 传染病及其预防(第一课时)课件-2025-2026学年人教版生物八年级上册
- (2025秋新版)二年级上册道德与法治全册教案
- 老挝药品注册管理办法
- 2025年社工工作者考试真题及答案
- 建设工程项目协同作业方案
- 《肥胖症诊疗指南(2024年版)》解读课件
- 2025安化事业单位笔试真题
- 竣工结算审计服务投标方案(技术方案)
- MOOC 跨文化交际通识通论-扬州大学 中国大学慕课答案
评论
0/150
提交评论