## 4.3 Bean 概述
Spring 的 IoC 容器管理一个或多个 bean。这些 bean 通过提供给容器的配置元数据被创 建出来,比如,在 XML 中的`<bean/>`定义的形式。
在容器本身,这些 bean 代表了 BeanDefinition 对象,它们包含(在其它信息中) 下列元数据:
打包的类限定名:就是这些 bean 的真正实现类。
bean 的行为配置元素,这表示了 bean 在容器中(范围,生命周期回调等等)应该是怎 样的行为。
对其它 bean 的引用,这是该 bean 工作所需要的;这些引用通常被称为合作者或依赖。
在新被创建的对象中的其它配置设置,比如,管理连接池的 bean 中使用的连接数或连 接池限制的大小。
元数据翻译成一组属性集合来构成每一个 bean 的定义。
表 4.1 bean 定义
| 属性 | 解释章节 |
| --- | --- |
| class | 4.3.2 节,“实例化 bean” |
| name | 4.3.1 节,“命名 bean” |
| scope | 4.5 节,“bean 的范围” |
| constructor arguments | 4.4.1 节,“依赖注入” |
| properties | 4.4.1 节,“依赖注入” |
| autowiring mode | 4.4.5 节,“装配合作者” |
| lazy-initialization mode | 4.4.4 节,“延迟初始化 bean” |
| initialization method | 4.6.1.1 节,“初始化回调” |
| descruction method | 4.6.1.2 节,“销毁回调” |
此外,bean 的定义还包含如何创建特定 bean 的信息,ApplicationContext 的实现类允许用户将容器外部创建的已有对象的注册。这可以通过 getBeanFactory()方法访问 ApplicationContext 的 BeanFactory 来完成 , 它 会 返 回 BeanFactory 的实现类 DefaultListableBeanFactory 。 DefaultListableBeanFactory 通 过 registerSingleton(..)和 registerBeanDefinition(..)方法来支持这种注册。 而典型的应用程序只和通过元数据定义的 bean 来工作。
### 4.3.1 命名 bean
每个 bean 有一个或者多个标识符。这些标识符必须在托管 bean 的容器内唯一。通常 一个 bean 只有一个标识符,但如果它需要多个的话,其它的可以被认为是别名。
在基于 XML 的配置元数据中,你可以使用 id 和/或 name 属性来指定 bean 的标识符。 id 属性允许你指定一个准确的 id。按照管理这些名称是字母和数字(‘myBean’,‘fooService’ 等),但是可能是特殊字符。如果你想为 bean 引入别名,你也可以在 name 属性中来指定,
通过逗号(,),分号(;)或空格来分隔。作为对历史的说明,在 Spring 3.1 版之前,id 属性 是 xsd:ID 类型,只限定为字符。在 3.1 版本中,现在是 xsd:string 类型了。要注意 bean 的 id 的唯一性还是被容器所强制的,但是对于 XML 处理器却不是。
当然你也可以不给 bean 提供 name 或 id。如果没有提供明确的 name 或 id,那么容器会为这个 bean 生成一个唯一的名称。然而,如果你想通过名称来参考这个 bean,那么可以 使用 ref 元素或者是服务定位器(4.15.2 节)风格的查找,你必须提供一个名称。不提供名称的动机是和使用内部 bean(4.4.2.3 节)或自动装备合作者(4.4.5 节)相关的。
Bean 的命名约定
该约定是用于当命名 bean 时,对实例字段名称的标准 Java 约定。也就是说,bean 的名称以小写字母开始,后面是驼峰形式的。这样的命名可以是(没有引号)‘accountManager’,‘accountService’,‘userDao’,‘loginController’ 等。
一致的命名 bean 可以使你的配置信息易于阅读和理解,如果你使用 Spring 的 AOP, 当应用通知到一组相关名称的 bean 时,它会给你很大的帮助。
#### 4.3.1.1 在 bean 定义外面起别名
在 bean 定义的本身,你可以为 bean 提供多于一个的名称,使用一个由 id 属性或 name 属性中的任意名称数指定的名称组合。这些名称对于同一个 bean 来说都是相等的别名,在 一些情况下,这是很有用的,比如在应用程序中允许每个组件参考一个共同的依赖,可以使 用为组件本身指定的 bean 的名称。
然而,在 bean 定义时指定所有的别名是不够的。有事可能想在任意位置,为一个 bean 引入一个别名。这在大型系统中是很常见的例子,其中的配置信息是分在每个子系统中的, 每个子系统都有它自己的对象定义集合。在基于 XML 的配置元数据中,你可以使用`<alias/>` 元素来完成这项工作。
```
<alias name="fromName" alias="toName"/>
```
在这个示例中,在相同容器中的名称为 fromName 的 bean,在使用过这个别名定义后, 也可以使用 toName 来指引。
比如,在子系统的配置元数据中,A 可能要通过名称‘subsystemA-dataSource’来指向 数据源。为子系统 B 的配置元数据可能要通过名称‘subsystemB-dataSource’来指向数据源。
当处理使用了这两个子系统的主程序时,主程序要通过名称‘myApp-dataSource’来指向数 据源。那么就需要三个名称指向同一个对象,那么就要按照下面的别名定义来进行添加
MyApp 的配置元数据:
```
<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />
```
现在每个组件和主程序都可以通过一个唯一的保证不冲突的名称来还有其它任意定义(更有效地是创建命名空间)来参照数据源了,当然它们参照的是同一个 bean。
### 4.3.2 实例化 bean
bean 的定义信息本质上是创建一个或多个对象的方子。当需要一个 bean 时,容器查找 这些方子来查找命名的 bean,并且使用由 bean 定义信息封装的配置元数据来创建(或获得) 一个真实的对象。
如果你使用基于 XML 的配置元数据,你为要被实例化的对象所指定的类型(或类)是 `<bean/>`元素中 class 属性。这个 class 属性,是 BeanDefinition 实例内部的 cla ss 属性,通常是强制要有的。(对于特例,可以参考 4.3.2.3 节,“使用实例的工厂方法来实例化”和 4.7 节,“Bean 定义的继承”)你可以以两种方法之一来使用 class 属性:
典型的是,指定要被构造的 bean 类,容器本身直接通过反射调用它的构造方法来创建bean,也就是和 Java 代码中使用 new 操作符是相同的。
指定包含 static 工厂方法的真实的类,会被调用来创建对象,在一些不太常见的情况下,容器会调用类的 static 工厂方法来创建 bean。从调用 static 工厂方法返回的对象类型可能 是和另外一个类完全相同的类。
内部类名称
如果你想为 static 嵌入的类配置 bean,你需要使用内部类的二进制名称。 比如,如果在 com.example 包下有一个 Foo 类,而这个 Foo 类有一个 static 的内部类 Bar,那么在定义 bean 时’class’属性的值就会是...
```
com.example.Foo$Bar
```
请注意名称中$符号的使用,用来从外部类名中分隔内部类名。
#### 4.3.2.1 使用构造方法实例化
当你使用构造方法来创建 bean 时,所有普通的类的使用都和 Spring 兼容。也就是说, 开发中的 bean 不需要实现任何特定的接口或以特定的方式来编码。仅简单指定 bean 的类 就足够了。但基于你使用的是什么类型的 IoC,就可能需要一个默认(空的)构造方法。
Spring 的 IoC 容器可以虚拟地管理任意的你想让它管理的类;而不仅仅限于管理真正的 JavaBean。很多 Spring 用户喜欢在容器中使用有默认(无参数)构造方法和在其后有适当 setter 和 getter 方法的真正 JavaBean。你也可以在容器中使用很多异样的,非 bean 样式的类。比 如,需要使用遗留的连接池,但是它没有符合 JavaBean 的规范,Spring 也能照样管理它。
基于 XML 的配置元数据,你可以如下来定义 bean:
```
<bean id="exampleBean" class="examples.ExampleBean"/>
<bean name="anotherExample" class="examples.ExampleBeanTwo"/>
```
关于提供构造方法参数(如果需要)和在对象被构造后,设置对象实例属性机制的详情, 请参考 4.4.1 节依赖注入。
#### 4.3.2.2 使用静态工厂方法来实例化
当使用静态工厂方法来定义 bean 的时候,可以使用 class 属性来指定包含 static 工厂 方法的类,而名为 factory-method 的属性来指定静态方法。你应该调用这个方法(还可 以有可选的参数)并返回一个实际的对象,随后将它视为是通过构造方法创建的一样。在遗留代码中,这样定义 bean 的使用方式之一是调用 static 工厂。
下面 bean 的定义指定了要通过调用工厂方法生成的 bean。这个定义没有指定返回对象 的类型(类),仅仅是包含工厂方法的类。在本例中,createInstance()方法必须是静 态方法。
```
<bean id="clientService" class="examples.ClientService" factory-method="createInstance"/>
public class ClientService {
private static ClientService clientService = new
ClientService();
private ClientService() {}
public static ClientService createInstance() {
return clientService;
}
}
```
关于提供(可选的)参数到工厂方法并在对象由工厂返回后设置对象实例属性的机制详 情,请参考 4.4.2 节深入依赖和配置。
#### 4.3.2.3 使用实例工厂方法来实例化
和使用静态工厂方法(4.3.2.2 节)实例化相似,使用实例工厂方法实例化是要调用容器 中已有 bean 的一个非静态的方法来创建新的 bean。要使用这个机制,请把 class 属性留 空,但在 factory-bean 属性中指定当前(或父/祖先)容器中 bea n 的名字,该 bean 要 包含被调用来创建对象的实例方法。使用 factory-method 方法来设置工厂方法的名称。
```
<!-- 工厂bean,包含名为createInstance()的方法 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!-- 为locator bean注入任意需要的依赖 -->
</bean>
<!-- 通过工厂bean来创建的bean -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
public class DefaultServiceLocator {
private static ClientService clientService = new
ClientServiceImpl();
private DefaultServiceLocator() {}
public ClientService createClientServiceInstance() {
return clientService;
}
}
```
一个工厂类也可以有多于一个工厂方法,比如下面这个:
```
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!--为locator bean注入任意需要的依赖 -->
</bean>
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
<bean id="accountService" factory-bean="serviceLocator"
factory-method="createAccountServiceInstance"/>
public class DefaultServiceLocator {
private static ClientService clientService = new
ClientServiceImpl();
private static AccountService accountService = new
AccountServiceImpl();
private DefaultServiceLocator() {}
public ClientService createClientServiceInstance() {
return clientService;
}
public AccountService createAccountServiceInstance() {
return accountService;
}
}
```
这个方法展示了工厂 bean 本身可以通过依赖注入(DI)被管理和配置。请参考 4.4.2 节
深入依赖和配置。 注意在 Spring 文档中,工厂 bean 指的是在 Spring 容器中配置的 bean,可以通过实例(4.3.2.3节)或静态(4.3.2.2 节)工厂方法来创建对象。与此相反的是,FactoryBean(注意大小写)指的是 Spring 特定的 FactoryBean(4.8.3 节)
- Spring 中文文档 3.1
- 第一部分 Spring framework 概述
- 第 1 章 Spring Framework 介绍
- 1.1 依赖注入和控制反转
- 1.2 模块
- 1.3 使用方案
- 第二部分 Spring 3 的新特性
- 第 2 章 Spring 3.0 的新特性和增强
- 2.1 Java 5
- 2.2 改进的文档
- 2.3 新的文章和教程
- 2.4 新的模块组织方式和系统构建方式
- 2.5 新特性概述
- 第 3 章 Spring 3.1 的新特性和增强
- 3.1 新特性概述
- 第三部分 核心技术
- 第 4 章 IoC 容器
- 4.1 Spring IoC 容器和 bean 的介绍
- 4.2 容器概述
- 4.3 Bean 概述
- 4.4 依赖
- 4.5 Bean 的范围
- 4.6 自定义 bean 的性质
- 4.7 Bean 定义的继承
- 4.8 容器扩展点
- 4.9 基于注解的容器配置
- 4.10 类路径扫描和管理的组件
- 4.11 使用 JSR 330 标准注解
- 4.12 基于 Java 的容器配置
- Hibernate 中文文档 3.2
- 前言
- 1. 翻译说明
- 2. 版权声明
- 第 1 章 Hibernate入门
- 1.1. 前言
- 1.2. 第一部分 - 第一个Hibernate应用程序
- 1.2.1. 第一个class
- 1.2.2. 映射文件
- 1.2.3. Hibernate配置
- 1.2.4. 用Ant构建
- 1.2.5. 启动和辅助类
- 1.2.6. 加载并存储对象
- 1.3. 第二部分 - 关联映射
- 1.3.1. 映射Person类
- 1.3.2. 单向Set-based的关联
- 1.3.3. 使关联工作
- 1.3.4. 值类型的集合
- 1.3.5. 双向关联
- 1.3.6. 使双向连起来
- 1.4. 第三部分 - EventManager web应用程序
- 1.4.1. 编写基本的servlet
- 1.4.2. 处理与渲染
- 1.4.3. 部署与测试
- 1.5. 总结
- 第 2 章 体系结构(Architecture)
- 2.1. 概况(Overview)
- 2.2. 实例状态
- 2.3. JMX整合
- 2.4. 对JCA的支持
- 2.5. 上下文相关的(Contextual)Session
- 第 3 章 配置
- 3.1. 可编程的配置方式
- 3.2. 获得SessionFactory
- 3.3. JDBC连接
- 3.4. 可选的配置属性
- 3.4.1. SQL方言
- 3.4.2. 外连接抓取(Outer Join Fetching)
- 3.4.3. 二进制流 (Binary Streams)
- 3.4.4. 二级缓存与查询缓存
- 3.4.5. 查询语言中的替换
- 3.4.6. Hibernate的统计(statistics)机制
- 3.5. 日志
- 3.6. 实现NamingStrategy
- 3.7. XML配置文件
- 3.8. J2EE应用程序服务器的集成
- 3.8.1. 事务策略配置
- 3.8.2. JNDI绑定的SessionFactory
- 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理
- 3.8.4. JMX部署
- 第 4 章 持久化类(Persistent Classes)
- 4.1. 一个简单的POJO例子
- 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor)
- 4.1.2. 提供一个标识属性(identifier property)(可选)
- 4.1.3. 使用非final的类 (可选)
- 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)(可选)
- 4.2. 实现继承(Inheritance)
- 4.3. 实现equals()和hashCode()
- 4.4. 动态模型(Dynamic models)
- 4.5. 元组片断映射(Tuplizers)
- 第 5 章 对象/关系数据库映射基础(Basic O/R Mapping)
- 5.1. 映射定义(Mapping declaration)
- 5.1.1. Doctype
- 5.1.1.1. EntityResolver
- 5.1.2. hibernate-mapping
- 5.1.3. class
- 5.1.4. id
- 5.1.4.1. Generator
- 5.1.4.2. 高/低位算法(Hi/Lo Algorithm)
- 5.1.4.3. UUID算法(UUID Algorithm )
- 5.1.4.4. 标识字段和序列(Identity columns and Sequences)
- 5.1.4.5. 程序分配的标识符(Assigned Identifiers)
- 5.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers)
- 5.1.5. composite-id
- 5.1.6. 鉴别器(discriminator)
- 5.1.7. 版本(version)(可选)
- 5.1.8. timestamp (可选)
- 5.1.9. property
- 5.1.10. 多对一(many-to-one)
- 5.1.11. 一对一
- 5.1.12. 自然ID(natural-id)
- 5.1.13. 组件(component), 动态组件(dynamic-component)
- 5.1.14. properties
- 5.1.15. 子类(subclass)
- 5.1.16. 连接的子类(joined-subclass)
- 5.1.17. 联合子类(union-subclass)
- 5.1.18. 连接(join)
- 5.1.19. 键(key)
- 5.1.20. 字段和规则元素(column and formula elements)
- 5.1.21. 引用(import)
- 5.1.22. any
- 5.2. Hibernate 的类型
- 5.2.1. 实体(Entities)和值(values)
- 5.2.2. 基本值类型
- 5.2.3. 自定义值类型
- 5.3. 多次映射同一个类
- 5.4. SQL中引号包围的标识符
- 5.5. 其他元数据(Metadata)
- 5.5.1. 使用 XDoclet 标记
- 5.5.2. 使用 JDK 5.0 的注解(Annotation)
- 5.6. 数据库生成属性(Generated Properties)
- 5.7. 辅助数据库对象(Auxiliary Database Objects)
- 第 6 章 集合类(Collections)映射
- 6.1. 持久化集合类(Persistent collections)
- 6.2. 集合映射( Collection mappings )
- 6.2.1. 集合外键(Collection foreign keys)
- 6.2.2. 集合元素(Collection elements)
- 6.2.3. 索引集合类(Indexed collections)
- 6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations)
- 6.2.5. 一对多关联(One-to-many Associations)
- 6.3. 高级集合映射(Advanced collection mappings)
- 6.3.1. 有序集合(Sorted collections)
- 6.3.2. 双向关联(Bidirectional associations)
- 6.3.3. 双向关联,涉及有序集合类
- 6.3.4. 三重关联(Ternary associations)
- 6.3.5. 使用&amp;lt;idbag&amp;gt;
- 6.4. 集合例子(Collection example)
- 第 7 章 关联关系映射
- 7.1. 介绍
- 7.2. 单向关联(Unidirectional associations)
- 7.2.1. 多对一(many to one)
- 7.2.2. 一对一(one to one)
- 7.2.3. 一对多(one to many)
- 7.3. 使用连接表的单向关联(Unidirectional associations with join tables)
- 7.3.1. 一对多(one to many)
- 7.3.2. 多对一(many to one)
- 7.3.3. 一对一(one to one)
- 7.3.4. 多对多(many to many)
- 7.4. 双向关联(Bidirectional associations)
- 7.4.1. 一对多(one to many) / 多对一(many to one)
- 7.4.2. 一对一(one to one)
- 7.5. 使用连接表的双向关联(Bidirectional associations with join tables)
- 7.5.1. 一对多(one to many) /多对一( many to one)
- 7.5.2. 一对一(one to one)
- 7.5.3. 多对多(many to many)
- 7.6. 更复杂的关联映射
- 第 8 章 组件(Component)映射
- 8.1. 依赖对象(Dependent objects)
- 8.2. 在集合中出现的依赖对象 (Collections of dependent objects)
- 8.3. 组件作为Map的索引(Components as Map indices )
- 8.4. 组件作为联合标识符(Components as composite identifiers)
- 8.5. 动态组件 (Dynamic components)
- 第 9 章 继承映射(Inheritance Mappings)
- 9.1. 三种策略
- 9.1.1. 每个类分层结构一张表(Table per class hierarchy)
- 9.1.2. 每个子类一张表(Table per subclass)
- 9.1.3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator)
- 9.1.4. 混合使用“每个类分层结构一张表”和“每个子类一张表”
- 9.1.5. 每个具体类一张表(Table per concrete class)
- 9.1.6. Table per concrete class, using implicit polymorphism
- 9.1.7. 隐式多态和其他继承映射混合使用
- 9.2. 限制
- 第 10 章 与对象共事
- 10.1. Hibernate对象状态(object states)
- 10.2. 使对象持久化
- 10.3. 装载对象
- 10.4. 查询
- 10.4.1. 执行查询
- 10.4.1.1. 迭代式获取结果(Iterating results)
- 10.4.1.2. 返回元组(tuples)的查询
- 10.4.1.3. 标量(Scalar)结果
- 10.4.1.4. 绑定参数
- 10.4.1.5. 分页
- 10.4.1.6. 可滚动遍历(Scrollable iteration)
- 10.4.1.7. 外置命名查询(Externalizing named queries)
- 10.4.2. 过滤集合
- 10.4.3. 条件查询(Criteria queries)
- 10.4.4. 使用原生SQL的查询
- 10.5. 修改持久对象
- 10.6. 修改脱管(Detached)对象
- 10.7. 自动状态检测
- 10.8. 删除持久对象
- 10.9. 在两个不同数据库间复制对象
- 10.10. Session刷出(flush)
- 10.11. 传播性持久化(transitive persistence)
- 10.12. 使用元数据
- 第 11 章 事务和并发
- 11.1. Session和事务范围(transaction scope)
- 11.1.1. 操作单元(Unit of work)
- 11.1.2. 长对话
- 11.1.3. 关注对象标识(Considering object identity)
- 11.1.4. 常见问题
- 11.2. 数据库事务声明
- 11.2.1. 非托管环境
- 11.2.2. 使用JTA
- 11.2.3. 异常处理
- 11.2.4. 事务超时
- 11.3. 乐观并发控制(Optimistic concurrency control)
- 11.3.1. 应用程序级别的版本检查(Application version checking)
- 11.3.2. 扩展周期的session和自动版本化
- 11.3.3. 脱管对象(deatched object)和自动版本化
- 11.3.4. 定制自动版本化行为
- 11.4. 悲观锁定(Pessimistic Locking)
- 11.5. 连接释放模式(Connection Release Modes)
- 第 12 章 拦截器与事件(Interceptors and events)
- 12.1. 拦截器(Interceptors)
- 12.2. 事件系统(Event system)
- 12.3. Hibernate的声明式安全机制
- 第 13 章 批量处理(Batch processing)
- 13.1. 批量插入(Batch inserts)
- 13.2. 批量更新(Batch updates)
- 13.3. StatelessSession (无状态session)接口
- 13.4. DML(数据操作语言)风格的操作(DML-style operations)
- 第 14 章 HQL: Hibernate查询语言
- 14.1. 大小写敏感性问题
- 14.2. from子句
- 14.3. 关联(Association)与连接(Join)
- 14.4. join 语法的形式
- 14.5. select子句
- 14.6. 聚集函数
- 14.7. 多态查询
- 14.8. where子句
- 14.9. 表达式
- 14.10. order by子句
- 14.11. group by子句
- 14.12. 子查询
- 14.13. HQL示例
- 14.14. 批量的UPDATE和DELETE
- 14.15. 小技巧 & 小窍门
- 第 15 章 条件查询(Criteria Queries)
- 15.1. 创建一个Criteria 实例
- 15.2. 限制结果集内容
- 15.3. 结果集排序
- 15.4. 关联
- 15.5. 动态关联抓取
- 15.6. 查询示例
- 15.7. 投影(Projections)、聚合(aggregation)和分组(grouping)
- 15.8. 离线(detached)查询和子查询
- 15.9. 根据自然标识查询(Queries by natural identifier)
- 第 16 章 Native SQL查询
- 16.1. 使用SQLQuery
- 16.1.1. 标量查询(Scalar queries)
- 16.1.2. 实体查询(Entity queries)
- 16.1.3. 处理关联和集合类(Handling associations and collections)
- 16.1.4. 返回多个实体(Returning multiple entities)
- 16.1.4.1. 别名和属性引用(Alias and property references)
- 16.1.5. 返回非受管实体(Returning non-managed entities)
- 16.1.6. 处理继承(Handling inheritance)
- 16.1.7. 参数(Parameters)
- 16.2. 命名SQL查询
- 16.2.1. 使用return-property来明确地指定字段/别名
- 16.2.2. 使用存储过程来查询
- 16.2.2.1. 使用存储过程的规则和限制
- 16.3. 定制SQL用来create,update和delete
- 16.4. 定制装载SQL
- 第 17 章 过滤数据
- 17.1. Hibernate 过滤器(filters)
- 第 18 章 XML映射
- 18.1. 用XML数据进行工作
- 18.1.1. 指定同时映射XML和类
- 18.1.2. 只定义XML映射
- 18.2. XML映射元数据
- 18.3. 操作XML数据
- 第 19 章 提升性能
- 19.1. 抓取策略(Fetching strategies)
- 19.1.1. 操作延迟加载的关联
- 19.1.2. 调整抓取策略(Tuning fetch strategies)
- 19.1.3. 单端关联代理(Single-ended association proxies)
- 19.1.4. 实例化集合和代理(Initializing collections and proxies)
- 19.1.5. 使用批量抓取(Using batch fetching)
- 19.1.6. 使用子查询抓取(Using subselect fetching)
- 19.1.7. 使用延迟属性抓取(Using lazy property fetching)
- 19.2. 二级缓存(The Second Level Cache)
- 19.2.1. 缓存映射(Cache mappings)
- 19.2.2. 策略:只读缓存(Strategy: read only)
- 19.2.3. 策略:读/写缓存(Strategy: read/write)
- 19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write)
- 19.2.5. 策略:事务缓存(transactional)
- 19.3. 管理缓存(Managing the caches)
- 19.4. 查询缓存(The Query Cache)
- 19.5. 理解集合性能(Understanding Collection performance)
- 19.5.1. 分类(Taxonomy)
- 19.5.2. Lists, maps 和sets用于更新效率最高
- 19.5.3. Bag和list是反向集合类中效率最高的
- 19.5.4. 一次性删除(One shot delete)
- 19.6. 监测性能(Monitoring performance)
- 19.6.1. 监测SessionFactory
- 19.6.2. 数据记录(Metrics)
- 第 20 章 工具箱指南
- 20.1. Schema自动生成(Automatic schema generation)
- 20.1.1. 对schema定制化(Customizing the schema)
- 20.1.2. 运行该工具
- 20.1.3. 属性(Properties)
- 20.1.4. 使用Ant(Using Ant)
- 20.1.5. 对schema的增量更新(Incremental schema updates)
- 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates)
- 20.1.7. Schema 校验
- 20.1.8. 使用Ant进行schema校验
- 第 21 章 示例:父子关系(Parent Child Relationships)
- 21.1. 关于collections需要注意的一点
- 21.2. 双向的一对多关系(Bidirectional one-to-many)
- 21.3. 级联生命周期(Cascading lifecycle)
- 21.4. 级联与未保存值(Cascades and unsaved-value)
- 21.5. 结论
- 第 22 章 示例:Weblog 应用程序
- 22.1. 持久化类
- 22.2. Hibernate 映射
- 22.3. Hibernate 代码
- 第 23 章 示例:复杂映射实例
- 23.1. Employer(雇主)/Employee(雇员)
- 23.2. Author(作家)/Work(作品)
- 23.3. Customer(客户)/Order(订单)/Product(产品)
- 23.4. 杂例
- 23.4.1. "Typed" one-to-one association
- 23.4.2. Composite key example
- 23.4.3. 共有组合键属性的多对多(Many-to-many with shared composite key attribute)
- 23.4.4. Content based discrimination
- 23.4.5. Associations on alternate keys
- 第 24 章 最佳实践(Best Practices)
- HttpClient 教程
- 前言
- 第一章 基础
- 第二章 连接管理
- 第三章 HTTP状态管理
- 第四章 HTTP认证
- 第五章 HTTP客户端服务
- 第六章 高级主题
- Mybatis 中文文档 3.4
- 参考文档
- 简介
- 入门
- XML 映射配置文件
- Mapper XML 文件
- 动态 SQL
- Java API
- SQL语句构建器类
- Logging
- 项目文档
- 项目总体信息
- 访问
- 提醒方法
- 项目依赖
- Dependency Information
- Overview
- 问题跟踪
- 项目授权
- 项目邮件列表
- Project Plugin Management
- Project Build Plugins
- Project Report Plugins
- 团队
- Web访问
- 匿名访问
- 开发者访问
- 通过防火墙访问
- 项目概要
- 生成报表
- MyBatis Generator 用户手册
- MyBatis Generator介绍
- MyBatis Generator新增功能
- MyBatis Generator 快速入门指南
- 运行 MyBatis Generator
- 从命令行运行 MyBatis Generator
- 使用Ant运行 MyBatis Generator
- 通过Maven运行 MyBatis Generator
- 使用Java运行 MyBatis Generator
- 运行 MyBatis Generator 后的任务
- Migrating from Ibator
- Migrating from Abator
- MyBatis Generator XML 配置参考
- &lt;classPathEntry&gt; 元素
- &lt;columnOverride&gt; 元素
- &lt;columnRenamingRule&gt; 元素
- &lt;commentGenerator&gt; 元素
- &lt;context&gt; 元素
- &lt;generatedKey&gt; 元素
- &lt;generatorConfiguration&gt; 元素
- &lt;ignoreColumn&gt; 元素
- &lt;javaClientGenerator&gt; 元素
- The &lt;javaModelGenerator&gt; Element
- The &lt;javaTypeResolver&gt; Element
- &lt;jdbcConnection&gt; 元素
- &lt;plugin&gt; 元素
- &lt;properties&gt; 元素
- &lt;property&gt; 元素
- &lt;sqlMapGenerator&gt; 元素
- &lt;table&gt; 元素
- 使用生成的对象
- JAVA实体对象
- SQL映射文件
- Java客户端对象
- Example类使用说明
- 扩展Example类
- 使用注意事项
- DB2 使用注意事项
- MySql 使用注意事项
- Oracle 使用注意事项
- PostgreSQL 使用注意事项
- 参考资料
- 从源码构建
- 扩展MyBatis Generator
- 开发插件
- 日志信息
- 提供的插件
- 设计理念
- Velocity 中文文档
- 1. 关于
- 2. 什么是Velocity?
- 3. Velocity 可以做什么?
- 3.1. Mud Store 示例
- 4. Velocity模板语言(VTL): 介绍
- 5. Hello Velocity World!
- 6. 注释
- 7. 引用
- 7.1. 变量Variables
- 7.2. 属性
- 7.3. 方法
- 8. 形式引用符Formal Reference Notation
- 9. 安静引用符Quiet Reference Notation
- 11. Case Substitution
- 12. 指令
- 12.1. #set
- 12.2. 字面字符串
- 12.3. 条件
- 12.3.1 If / ElseIf / Else
- 12.3.2 关系和逻辑操作符
- 12.4. 循环
- 12.4.1. Foreach 循环
- 12.5. 包含
- 12.6. 解析
- 12.7. 停止
- 12.10. 宏
- 12.10.1. Velocimacro 参数
- 12.10.2. Velocimacro 属性
- 12.10.3. Velocimacro Trivia
- 13. Getting literal
- 13.1. 货币字符
- 13.2. 转义 有效的 VTL 指令
- 13.3. 转义 无效的 VTL 指令
- 14. VTL 格式化问题
- 15. 其它特征和杂项
- 15.1. 数学特征
- 15.2. 范围操作符
- 15.3. 进阶:转义和!
- 15.4. Velocimacro 杂记
- 15.5. 字符串联
- Google Guava官方教程(中文版)
- 1-基本工具
- 1.1-使用和避免null
- 1.2-前置条件
- 1.3-常见Object方法
- 1.4-排序: Guava强大的”流畅风格比较器”
- 1.5-Throwables:简化异常和错误的传播与检查
- 2-集合
- 2.1-不可变集合
- 2.2-新集合类型
- 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
- 2.4-集合扩展工具类
- 3-缓存
- 4-函数式编程
- 5-并发
- 5.1-google Guava包的ListenableFuture解析
- 5.2-Google-Guava Concurrent包里的Service框架浅析
- 6-字符串处理:分割,连接,填充
- 7-原生类型
- 8-区间
- 9-I/O
- 10-散列
- 11-事件总线
- 12-数学运算
- 13-反射
- JFreeChart 开发者指南
- 1 简介
- 1.1 什么是JFreeChart
- 1.2 使用文档
- 1.3 感谢
- 1.4 建议
- 2 图表实例
- 2.1 介绍
- 2.2 饼图(Pie Charts)
- 2.3 直方条形图(Bar Charts)
- 2.4 折线图(Line Charts)
- 2.5 XY(散点图)
- 2.6 时序图
- 2.7 柱状图
- 2.8 面积图
- 2.9 差异图
- 2.10 梯形图
- 2.11 甘特图
- 2.12 多轴图
- 2.13 复合/覆盖图
- 2.14 开发远景
- 3 下载和安装JFreeChart 1.0.6
- 3.1 简介
- 3.2 下载
- 3.3 解包
- 3.4 运行演示实例
- 3.5 编译源代码
- 3.6 产生javadoc文档
- 4 使用JFreeChart1.0.6
- 4.1 概述
- 4.2 创建第一个图表
- 5 饼图(Pie Charts)
- 5.1 简介
- 5.2 创建一个简单的饼图(Pie Charts)
- 5.3 片区颜色
- 5.4 片区外廓
- 5.5 空置、零值和负值
- 5.6 片区和图例标签
- 5.7 “取出”某个片区
- 5.8 3D饼图
- 5.9 多饼图
- 5.10 实例讲解
- 6 直方条形图(Bar Charts)
- 6.1 简介
- 6.2 创建一个直方条形图
- 6.3 ChartFactory类
- 6.4 直方条形图的简单定制
- 6.5 定制外观
- 6.6 示例代码解读
- 7 折线图
- 7.1 简介
- 7.2 使用categoryDataset数据集创建折线图
- 7.3 使用XYDataset数据集创建折线图
- 8 时序图
- 8.1 简介
- 8.2 创建时序图
- 9 定制图表(Customising Charts)
- 9.1 简介
- 9.2 图表属性
- 9.3 图区属性
- 9.4 轴属性
- 9.5 心得体会
- 10 动态图(Dynamic Charts)
- 10.1 简介
- 10.2 知识背景
- 10.3 实例应用
- 11 图表工具条(Tooltips)
- 11.1 概述
- 11.2 创建图表工具条
- 11.3 收集图表工具条
- 11.4 显示图表工具条
- 11.5 隐藏图表工具条
- 11.6 定制图表工具条
- 12 图表条目标签(Item Label)
- 12.1 简介
- 12.2 显示条目标签
- 12.3 条目标签外观
- 12.4 条目标签位置
- 12.5 定制条目标签文本
- 12.6 实例1
- 12.7 实例2
- 13 多轴和数据源图表(Multi Axis and Dataset)
- 13.1 简介
- 13.2 实例
- 13.3 建议和技巧
- 14 组合图表(Combined Charts)
- 14.1 简介
- 14.2 组合X种类图区
- 14.3 组合Y种类图区
- 14.4 组合X-XY图区
- 14.5 组合Y-XY图区
- 15 数据源和JDBC(Dataset And JDBC)
- 15.1 简介
- 15.2 关于JDBC
- 15.3 样本数据
- 15.4 PostgreSQL
- 15.5 JDBC驱动
- 15.6 应用演示
- 16 导出图表为PDF格式
- 16.1 简介
- 16.2 什么是Acrobat PDF
- 16.3 IText
- 16.4 Graphics2D
- 16.5 开始导出
- 16.6 实例应用
- 16.7 查看PDF 文件
- 16.8 Unicode字符问题
- 17 导出图表为SVG格式
- 17.1 简介
- 17.2 背景
- 17.3 实例代码
- 18 Applet
- 18.1 简介
- 18.2 问题
- 18.3 实例应用
- 19 Servlets
- 19.1 介绍
- 19.2 编写一个简单的Servlet应用
- 19.3 编译实例Servlet
- 19.4 部署实例Servlet
- 19.5 在HMTL页面种嵌入图表
- 19.6 支持文件
- 19.7 部署Servlets
- 20 JFreeChart相关技术
- 20.1 简介
- 20.2 X11/Headless Java
- 20.3 JSP
- 20.4 加载图片
- 21 包
- 21.1 概述