我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: Spring in Action的学习笔记---(一) 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

独飞の孤心



性别: 帅哥 状态: 该用户目前不在线
头衔: 孽缘!
等级: 荣誉会员
家族: 单身贵族
发贴: 4484
威望: 3
浮云: 496
在线等级:
注册时间: 2005-10-12
最后登陆: 2011-09-23

5come5帮你背单词 [ thankful /'θæŋkful/ a. 感谢的,感激的 ]


Spring in Action的学习笔记---(一)

一章:
1.Spring的承诺
好的设计比实现技术更重要:如果Spring就能满足需求就不要去使用EJB
通过接口松散耦合的JavaBean是一个很好的模型:减小耦合的一种办法是将具体实现隐藏在接口下面,这样具体实现类的替换不会影响到引用类。Spring通过在外部文件配置(其实是调用set方法)时才具体地去实现这个接口,从而减少了两个类之间的耦合度,当然完全没有耦合的系统是没有用的。
代码应该容易被测试

2.Spring概述
轻量级:大小和开支
反向控制(IOC):对象不是从容器中去找自己需要的对象,而是容器在实例化对象时主动将对象依赖的类注入给它
面向侧面(AOP):Spring的事务管理都是AOP的,它们只关心它们应该做的一方面问题(如:业务处理,日志),从而实现了内聚
容器:包含了对对象生命周期的配置和管理
框架:Spring提供的每一个API就是一个模块,他们之间通过配置文件组合起来

3.模块(7个)
核心容器,Application Context,AOP,JDBC抽象和DAO模块,OR映射模块,WEB模块,Spring MVC

4.IOC
反向控制(又叫依赖注入)。任何系统都至少需要两个相互合作的类来完成业务逻辑。通常,每个对象都需要得到另一个对象,这样的耦合度很高(比如测试一个类的同时也测试了另一个类)。所以IOC采取在对象被创建的时候由负责协调系统中各个对象的外部实体来提供依赖,这就以为着对象如何得到它的协作对象的责任反转了。我们不再是用get去主动获取,而是由容器调用set(注入的方法还有通过接口和使用构造函数)被动注入。

5.AOP(捕捉常用功能,并使之成为组件)
把每个切面想象成一个覆盖面,每个切面都覆盖了系统的很多个部分,因此它可以很灵活地应用到系统中,甚至那些使用切面的系统部分都不知道它们的存在。这样很好,因为切面的工作并不会受到系统工作的影响。
编织切面(weaving):把通知(advice)应用到一个对象叫做编织、

二章:
1.不象其他工厂模式(只是分发一种类型的对象),Bean工厂是一个通用工厂,可以创建和分发各种类型的对象。
2.BeanFactory采用延迟加载对象,也就是说Bean工厂只是把Bean定义信息载入,但是只有在需要的时候才被实例化。而ApplicationContext是在初始化的时候就把所有的对象都载入进来。
3.ApplicationContext
它是beanFactory的扩展,除了提供beanFactory的功能外还提供:
文本信息解析工具,包括对国际化的支持
提供了载入文件资源的通用方法,如载入图片
可以向注册为监[屏蔽]的Bean发送事件
4.Bean的生命周期
容器寻找Bean的定义信息并将其实例化->使用依赖注入,按照定义信息配置Bean的属性->如果实现了BeanNameAware接口,工厂调用Bean的setBeanName方法传递Bean的ID->如果实现了BeanFatoryAware接口,工厂调用Bean的setBeanFactory方法传入工厂自身->如果有BeanPostrocessor和Bean相关联那么他们的相应方法将被调用->调用指定的init_method方法->如果有BeanPostrocessor和Bean相关联那么他们的相应方法将被调用->如果实现了DisposableBean接口,destroy方法将被调用,或者调用自定义的销毁方法
5.Bean的singleton属性
默认为true:即为单例模式,在容器分配Bean的时候它总是返回同一个实例
设置为false时,即为原型模式。
6.<bean id="foo" class="..." init-method="setup" destroy-method="destroy">
setup和destroy都是在Bean中定义的,他们分别对应Bean的初始化和销毁方法
7.通过set方法的注入
Spring中可以使用<list><map><set><props>来代表一个集合属性。如:
<bean ...>
  <property name="list">
    <list>
    <value>需要的值</value>
    <ref bean=""> <list>中可以是任何一种元素,甚至是另一list
    </list>
  </property></bean>
<set>的装配方法和list相同,下面是一个<map>的装配方法:
<bean ...>
  <property name="list">
    <map>
    <entry key="key1"> 主键,key只能是String!
      <value>...</value> 值
    </entry>
    </map>
  </property></bean>
下面是一个<props>的装配方法:
<bean ...>
  <property name="list">
    <props>
    <prop key="key1">...(此处只能是String)</prop>
    </props>
  </property></bean>
另外还有<null/>。
8.通过构造函数的注入
用<constructor-arg>

如果有多个参数时,要用index或type属性来指定哪个值是属于哪个参数的
9.自动装配(使用autowire属性):不需要用<property>显示地配置
有四种情况:
byName:在容器中寻找和需要自动装配的属性名相同的Bean(或ID)
byType:在容器中寻找一个与需要自动装配的属性类型相同的Bean
constructor:通过构造函数来查找
autodetect:首先用constructor然后用byType
10.分散配置
<bean id="configuration" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <value>jdbc.properties</value>
  </property>
</bean>
如果想使用多个properties文件,可以这样配置:
<bean id="configuration" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <list>
    <value>jdbc1.properties</value>
    <value>jdbc2.properties</value>
    </list>
  </property>
</bean>
然后就可以用${}访问了。
11.Bean后处理,实现BeanPostProcessor接口
BeanPostProcessor接口有postProcessorBeforeInitialization(在Bean初始化之前调用)和postProcessorAfterInitialization
本帖最近评分记录:
  • 浮云:30 (by zc1984) | 理由: 原创内容
  • 顶端 Posted: 2006-12-23 11:02 | [楼 主]
    我来我网·5come5 Forum » 程序员之家

    Total 0.006141(s) query 6, Time now is:11-23 22:13, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号