您的位置:首页 > 编程语言 > Java开发

传智播客——传说中最复杂的框架——Spring(一)

2010-04-07 21:42 204 查看
听工作的同学说struts和hibernate都挺简单的,三大框架中最复杂的框架是Spring,刚开始不以为然,后来接触到了struts,很吃力的学完了struts,接着跟着组织混过了hibernate,这两大框架我已经学的精疲力尽了,这个时候再回头来想同学的话,心里顿时凉了一半。
因为觉得肯定很难,所以我一天下来努力不让自己走神,晚上回来我可以光荣的大叫一声:Spring,不难,起码比hibernate简单
现在来看看传说中的Spring究竟是个什么东西
一 Spring的概念
1 IOC,对象控制方式反转
什么叫对象控制方式反转,想想我们刚刚学过的OA流程,Action调用Service,Service调用Hibernate,Hibernate调用数据库,每一层都要实现对引用层的引用
比如在Action里需要这么一行代码
EmployeeService es=new EmployeeServiceImpl();
如果没有这一行代码就无法实现对Service层的调用。
如果Spring称自己的调用方式是我们现在调用方式的反转的话,那这句话的意思就是可以直接调用Action而不用去理会其中各个层次间的调用关系。
2 DI 依赖注入,据说Spring作者觉得这个解释比IOC更好,当然我是不觉得好在哪里的,甚至不觉得好。。。
二 Spring概念我的理解
在我看来Spring所做的工作最简单的说就是用XML文件的方式配置了多个类之间的相互调用关系和属性赋值。
我觉得Spring的核心就在XML文件上,
<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/200 1/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework .org/schema/beans/spring-beans-2.5.xsd ">
<!-- 欢迎服务,配置bean -->
<bean id="greetingService" class="cn.itcast.spring.service.GreetingService" init-method="ini">

<property name="greeting" value="hello world" />
<property name="greeting2" value="tom" />
<property name="bs" ref="byeService"/>
</bean>
<!-- 欢送服务类 -->
<bean id="byeService" class="cn.itcast.spring.service.ByeService" scope="singleton">
<property name="bye" value="byebye" />
</bean>

</beans>

从这个XML文件可以看到配置了两个类,一个类是GreetingService,另一个类是ByeService,以前需要在greetingService里持有一个对ByeService的引用那个语句被 <property name="bs" ref="byeService"/>代替
从这里可以看到对另外一个类的引用可以完全不用去修改源代码,这是多么惬意的一件事情,

这是一个最简单的HelloWorld,下面详细的学习各种细节

二 各种基础细节

1工厂设计模式,创建分发各种bean。配置好它们之间的写作关系,参与bean的生命周期。
BeanFactory factory = new XmlBeanFactory(new FileInputStream("beans.xml"));
bean工厂只把bean的定义信息载进来,用到的时候才实例化。
factory.getBean("mybean");就可得到一个bean。
2 使用应用上下文
ApplicationCotext,spring高级的容器。功能强大:
1.提供文本信息解析工具,包括对国际化支持。
2.提供载入文件资源的通用方法,如图片。
3.可以向注册为监听器的bean发送事件。
3另外两种加载XML文件的方式,仅仅是加载方式不同
ApplicationContext context =
new FileSystemXmlApplicationContext("
c:/foo.xml");
ApplicationContext context =
new ClassPathXmlApplicationContext("
foo.xml");
3 与hibernate相似的地方
与bean工厂的另一个重要区别是关于单例bean如何被加载。bean工厂延迟加载所有bean,直到getBean()
方法被调用。应用上下文会在启动后预载入所有单例bean.这样可确保应用不需要等待他们被创建,这和hibernate里面实体配置文件里面的lazy属性差不多。
4Spring工作流程
1 容器寻找bean的定义信息并实例化。
2 使用依赖注入,spring按bean定义信息配置bean的所有属性。
3.若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递bean的ID。
4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。
5.若BeanPostProcessor和bean关联,则它们的postProcessBeforeInitialization()方法被调用。
6.若bean指定了ini-method方法、,它将被调用。
7.最后,若有BeanPostProcessor和bean关联,则它们的postProcessAfterInitialization()方法被调用、。
学习总结:一天学下来深有感触,Spring基本上稍微走神一点都会跟不上,学习无他认真才是王道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: