这章简单的来了解下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 相关的更多相关文章

  1. Java动态代理-->Spring AOP

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...

  2. 初学Java ssh之Spring 第一篇

    之前虽然毕业前实习的工作是使用的C# .NET语言,但是,毕业后还是果断应聘Java.虽然自己对Java的理解不如C#深入,只是对基础知识比较熟悉,但还是义无返顾了··· 虽然应聘经历比较坎坷,但最终 ...

  3. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  4. Spring相关问题

    1.什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合.广泛的基础性支持的 Java 平台.Spring帮助开发者解决了开发中 ...

  5. 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案

    技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...

  6. 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 ...

  7. 【Java】关于Spring框架的总结 (三)

    前文对 Spring IoC 和 Spring AOP 的实现方法进行了整合.如果有不明白的或有质疑的地方可以评论出来,一起探讨问题,帮助别人也是帮助自己!本文探讨的中心主要放在 Spring 的注解 ...

  8. Java方式配置Spring MVC

    概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...

  9. 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案--temp

    技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...

随机推荐

  1. 【smarty项目源码】模拟smarty模版文件的解析过程

    <?php class MyMiniSmarty{ //模版文件的存放路径 var $template_dir="./templates/"; //编译文件的存放路径 ,编译 ...

  2. git cherry-pick简介

    本文编辑整理自: http://sg552.iteye.com/blog/1300713 http://web.mit.edu/bitbucket/git-doc/git-cherry-pick.tx ...

  3. TCP三次握手原理详解

    TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层. TCP协议:即传输控制 ...

  4. emoji表情初探

    2015年12月28日 14:24:51 星期一 首先注意的地方: 1. emoji是需要操作系统支持的, 例如: ios更新时, 会在升级日志里说明, 增加了对多少个emoji图标的支持. 原理上是 ...

  5. ffmpeg-20160701-git-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  6. HDU 4865 Peter's Hobby(概率、dp、log)

    给出2个影响矩阵,一个是当天天气对湿度的影响,一个是前一天天气对当天天气的影响. 即在晴天(阴天.雨天)发生Dry(Dryish.Damp.Soggy)的概率,以及前一天晴天(阴天.雨天)而今天发生晴 ...

  7. 括号配对问题_栈<stack>

    问题 A: 括号配对问题 时间限制: 3 Sec  内存限制: 128 MB提交: 3  解决: 2[提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行 ...

  8. Greedy:Sum of Consecutive Prime Numbers(POJ 2739)

     素数之和 题目大意:一些整数可以表示成一个连续素数之和,给定一个整数要你找出可以表示这一个整数的连续整数序列的个数 方法:打表,然后用游标卡尺法即可 #include <iostream> ...

  9. 针对Xcode的警告忽略消除处理

    一.问题描述 html代码如下 <html> <head> <meta charset="utf-8"/> <title>我的网页& ...

  10. C# 总复习

    1.循环语句 四要素:初始条件.循环条件.循环体.状态改变 循环的最后一句:循环条件不再满足 2. ++     --int a = 5; //在赋值语句中,后++需要,先进性赋值,然后进行+1运算 ...