Spring 配置中 bean 的 class 使用工厂 Bean 的含义解析

Spring 配置中 bean 的 class 使用工厂 Bean 的含义解析

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

    <bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean">
        <property name="mapperInterface" value="com.manager.data.StudentMapper"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

1.此为 Spring 的配置文件中,配置的一个 bean;
    当然了 Spring 的配置文件可以有多个,最终的 Bean 都会被实例化,按 XML 配置中进行装配,

    所谓装配就是谁是谁的属性,就把它赋给其属性,一级一级地装配完成。

2、就 bean 在 XML 中的实例化定义来看:

<bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean">

id 是用来标识这个 bean,或者说就是 Java 代码中实例化时,该类的名字;
该类是指谁呢?当然是后面的 class 指向的类了!

不过,这里有奇巧,后面的类是 FactoryBean,没办法被实例化,所以,是自动由 Spring 框架调用了该工厂 Bean 的工厂方法来获取到 StudentMapper 类的实例,

这种情况下,前面 id 所引用的就不是后面 class 类的实例了,当然了 id 所代表的引用类型也就不是了。

这回就知道了 MyBatis 的 Mapper 的来由了。

3、然而有更简便的方法达到 MyBatis 与 Srping 的整合,那就是 MyBatis-Srping 组件,我们使用的 MyBatis 包中的各种包类,在引入它之后,就换用它里面的对应同名类了:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

而且 Mapper 的实例对象获得,也不再那么麻烦,使用 MyBatis-Spring 中的方式:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

有了这句,所有的 Mapper 按其属性表达式值指定的位置进行搜索,全部能被正确实例化;
在 Spring 所有配置文件上下文环境中,均可以自由引用。

时间: 2024-09-14 22:12:27

Spring 配置中 bean 的 class 使用工厂 Bean 的含义解析的相关文章

hibernate异常是在sturuts的action中捕获还是spring配置中捕获

问题描述 初次尝试使用SSH框架来做项目,发现如果出现hibernate异常的话页面上非常难看,希望可以捕获异常来换成信息提示的或把与业务操作无关的异常进行屏蔽 解决方案 一般来说,可以将异常抛到action层进行捕获,然后通过struts的配置文件设置统一的异常页面,将异常信息可以作为隐藏显示到页面上,通过右键查看源文件时,可以看到详情.而用户可以看到的只有一个比较有针对性的提示,这样界面也比较美观,也便于开发人员定位问题.解决方案二:配置struts.xml global-exception

用FactoryBean让Spring配置动起来

看到不少朋友讨论 spring 配置时认为 spring 配置中只能静态的设置一些参数(典型情况如数据库配置, 定时器配置等)导致不方便, 其实 spring 已经提供了非常便利的方式来实现动态配置, 我们要做的只是实现一个自己的 FactoryBean , 来看一下 FactoryBean 接口的定义 代码 /** * Interface to be implemented by objects used within a BeanFactory * that are themselves f

spring-Spring配置中如何给Map注入List类型的值

问题描述 Spring配置中如何给Map注入List类型的值 如题:有如下一个类,该如何在bean中为其注入值? package com.spring.di; import java.util.List; import java.util.Map; public class Company { public Map<Department, List<Employee>> map; public Map<Department, List<Employee>>

spring-Spring配置中调用外部数据库配置文件

问题描述 Spring配置中调用外部数据库配置文件 (非web)将数据库配置文件放在src下编译后自动在类路径下生成该文件,这种方式会,但是,如果数据库配置文件不放在src下,而是和src同级目录,Spring配置文件中如何调用这个配置文件? 解决方案 src是类路径,在调用的时候可以在web.xml中指定路径参数classpath*:spring-context.xml这样来配置,如果不是放在src,那么就不在类路径下,那么只有指定具体路径来加载.

spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍

Bean的基本属性   id属性: Bean的唯一标识名.它必须是合法的XML ID,在配置文件中,不能有重复id的Bean,因为容器在获取Bean的实例时都用它来做唯一索引. name属性: 用来为id创建一个或多个别名.它可以是任意的字母符合.多个别名之间用逗号,封号或空格分开. class属性: 用来定义类的全限定名(包名+类名),class属性指明了Bean的来源. 下面是一个Bean的简单配置: <?xml version="1.0" encoding="UT

深入解析Java的Spring框架中的混合事务与bean的区分_java

混合事务在ORM框架的事务管理器的事务内,使用JdbcTemplate执行SQL是不会纳入事务管理的. 下面进行源码分析,看为什么必须要在DataSourceTransactionManager的事务内使用JdbcTemplate. 1.开启事务DataSourceTransactionManager protected void doBegin(Object transaction,TransactionDefinition definition) { DataSourceTransactio

深入解析Java的Spring框架中bean的依赖注入_java

每一个基于java的应用程序都有一个共同工作来展示给用户看到的内容作为工作的应用几个对象.当编写一个复杂的Java应用程序,应用程序类应该尽可能独立其他Java类来增加重复使用这些类,并独立于其他类别的测试它们,而这样做单元测试的可能性.依赖注入(或有时称为布线)有助于粘合这些类在一起,同时保持他们的独立. 考虑有其中有一个文本编辑器组件的应用程序,要提供拼写检查.标准的代码将看起来像这样:   public class TextEditor { private SpellChecker spe

Spring容器中Bean的作用域

    当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例 prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例 request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次

Java的Spring框架中AOP项目的一般配置和部署教程_java

0.关于AOP面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是软件开发中的一个热点,也是Spring框架中的一个重要内容.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP是OOP的延续. 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等. 主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对