Java Hour 66 Spring 相关
这章简单的来了解下Spring 和 Hibernate 是如何勾搭在一起的。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
这个是最基本的bean 配置文件。
顺便说下下载Spring ,不用去中央仓库,可以去spring 家自己的仓库。
<repository>
<id>io.spring.repo.maven.release</id>
<url>http://repo.spring.io/release/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
获得Hibernate 的SessionFactory对象
SessionFactory sessionFactory = (SessionFactory) ctx.getBean("sessionFactory");
这个不就是上面配置的AnnotationSessionFactoryBean 么?
查看下这个类的继承关系

间接继承了AbstractSessoinFactoryBean.
public abstract class AbstractSessionFactoryBean extends HibernateExceptionTranslator
implements FactoryBean<SessionFactory>, InitializingBean, DisposableBean {
可以看到这里实现了FactoryBean<SessionFactory>
这里我先假设Spring 都是通过这个FactoryBean<T>.getObject() 方法来获得当前的bean, 事实如何需要在后面继续看。
public interface FactoryBean<T> {
T getObject() throws Exception;
Spring IoC 部分的温习
Ioc 部分基础的包就是org.springframework.beans 和 org.springframework.core
重要的接口是
BeanFacotry
public interface BeanFactory {
这个是root 接口。

可以看到我们上面用的ApplicationContext 间接继承了这个接口并扩展了功能。

所以本文中的ApplicationContext 其实是BeanFactory 的一个实例。
当然有了这个扩展,我们可以试用XML,也可以使用注解,还可以直接使用代码来配置Bean.
Spring Ioc 容器管理Bean
正如配置文件里面配置的,多个Bean 都受Spring Ioc 容器管理。
关于Spring 如何实例化,如何注入等,这个可以用一个练习专题来提高熟练度。
getter / setter 注入
package org.mike.spring.practice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class MainApp {
public static void main(String[] args) throws Exception {
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:beans.xml");
IPerson p = ctx.getBean("chinese", IPerson.class);
p.useAxe();
}
}
我们可以看到配置文件中配置了一个property, 这个属性的含义有一点点的C# 的味道,当然这里是通过set 注入的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="chinese" class="org.mike.spring.practice.ChinesePerson">
<property name="axe">
<ref local="stoneAxe" />
</property>
</bean>
<bean id="stoneAxe" class="org.mike.spring.practice.StoneAxe" />
</beans>
构造注入
package org.mike.spring.practice;
public class ChinesePerson implements IPerson {
private Axe axe;
public ChinesePerson(Axe axe) {
this.axe = axe;
}
@Override
public void useAxe() {
axe.chop();
}
}
改写配置文件节点。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="chinese" class="org.mike.spring.practice.ChinesePerson">
<constructor-arg>
<ref bean="stoneAxe" />
</constructor-arg>
</bean>
<bean id="stoneAxe" class="org.mike.spring.practice.StoneAxe" />
</beans>
两种注入方式的比较
设值注入比较容易理解,比较方便使用,可以避免构造函数复杂化。
构造注入可以决定依赖顺序,可以封装字段避免字段暴露方法,无须担心依赖被破坏。
Java Hour 66 Spring 相关的更多相关文章
- Java动态代理-->Spring AOP
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...
- 初学Java ssh之Spring 第一篇
之前虽然毕业前实习的工作是使用的C# .NET语言,但是,毕业后还是果断应聘Java.虽然自己对Java的理解不如C#深入,只是对基础知识比较熟悉,但还是义无返顾了··· 虽然应聘经历比较坎坷,但最终 ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- Spring相关问题
1.什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合.广泛的基础性支持的 Java 平台.Spring帮助开发者解决了开发中 ...
- 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...
- Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...
- 【Java】关于Spring框架的总结 (三)
前文对 Spring IoC 和 Spring AOP 的实现方法进行了整合.如果有不明白的或有质疑的地方可以评论出来,一起探讨问题,帮助别人也是帮助自己!本文探讨的中心主要放在 Spring 的注解 ...
- Java方式配置Spring MVC
概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...
- 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案--temp
技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...
随机推荐
- 术&道
技术分为术和道两种. 具体做事的方法为术:做事的原理和原则是道. 追求术的人一辈子工作很辛苦,只有掌握了道的本质和精髓才能永远游刃有余. 在纷繁的选择面前, 不知到哪些是对的没关系, 知道哪些是不好的 ...
- MySQL表结构及数据的备份
1.Navicat for MySQL 选择要保存的表,右键转储SQL文件,导出的sql文件中包括表的定义和表的数据两部分. 其他办法: (1) create table dust select * ...
- window下安装mongodb及php mongo扩展
1.安装mongoDB 下载最新版本的 MongoDB 下载地址:http://www.mongodb.org/downloads 解压文件到 D:\mongodb 解压后的文件列表如下: 创建数据存 ...
- 项目中Ajax调用ashx页面中的Function的实战
前台页面: 使用几个display=none的空间存储DropdownList中的值,点击Search Button后刷新页面再次给DropdownList赋值使用 <%@ Page Langu ...
- 【leetcode】Unique Paths II
Unique Paths II Total Accepted: 22828 Total Submissions: 81414My Submissions Follow up for "Uni ...
- Javascript 面向对象
面向对象语言的标识:类的概念. ECMAScript中没有类的概念,因此他的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象.函数.我们可 ...
- 多线程同步_Monitor
多线程一直在学习和理解中...... Monitor类是多线程中用以实现同步的一种技术,主要是同一进程内多线程间的同步技术. Monitor类中有以下几个方法需要注意: Monitor.Enter(o ...
- STL vector按多字段值排序
#include <iostream> #include <vector> #include <string> #include <algorithm> ...
- ant使用指南详细入门教程
这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...
- vs2010:fatal error LNK1123: 转换到 COFF 期间失败
解决方法: 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”.