`
dwangel
  • 浏览: 267348 次
社区版块
存档分类
最新评论

讨论:在spring中自动引用dao的bean的设想

阅读更多
Updated on 2011-1-30
在struts2里使用了自动查找类的技术。
那部分代码可以用来实现这个。当然,主要还是要看具体项目需求。 
Spring mvc的annotation方式配置Controller也采用了类似技术。

其基本思路是 从 Resource中查找META-INF下包含的jar包和其它classpath信息。
对于直接文件系统路径下文件,直接遍历目录得到类名;
对于jar,则内存中解压,遍历指定路径,得到类名;
在得到类名后,用该类名在classloader中查找具体实现类。
——————————————————————————————————————————————————
最近,大略看了下rails,觉得那种约定方式的编程,确实方便很多。

想到spring的DAO模式,其实基本上都是类似模式。
一堆接口对应一堆dao的实现,配置基本上都是雷同的。
不知道有无可能使用使用这样的方式来自动引入dao:

DaoFactory检索dao interface所在的package,然后解析dao的名字出来,
根据dao的名字建立bean放到spring的bean factory里,同时设置一下session factory。
比如有一个UserDao在接口包里,那么daoName就是userDao,生成的Bean就是userDao。
使用的实现类则按名称模式拼出来%daoName%Hibernate,UserDaoHibernate,或者就是以包的
最后一个字符串作为后缀。
这样就可以放一个dao的interface和实现,进行自动配置了。

类似下面的配置代码。

<bean id="daoFactory" class="cn.mudfans.dwangel.spring.DaoFactory">
<property name="sessionFactory" value="sessionFactory"/>
<property name="daoInterfacePackage" value="cn.mudfans.dwangel.dao"/>
<property name="excludes">
    <props/>
</property>
<property name="daoImplementPackage" value="cn.mudfans.dwangel.dao.hibernate"/>
<property name="daoImplementPattern" value="%daoName%Hibernate"/>
</bean>

剩下的问题是,我对spring还不了解,不知道如何解决依赖关系的检查问题。


大家给点意见吧。
分享到:
评论
11 楼 baallee 2007-07-03  
既然已经约定了类名和接口,我们可以动态生成这些配置文件在classpath下,程序运行期间可以让spring动态加载。不过考虑到效率问题,在程序启动时做类似的事会比较好。
10 楼 dwangel 2007-06-27  
我知道的,但是Seasar2跟spring是等价的东西。
一般不会用spring又用seasar。
9 楼 volfo 2007-06-27  
日本人做的seasar2就含有这方法,
http://s2container.seasar.org/ja/DIContainer.html
只要按照约定,命名class&packge,就能省去写xml的时间。
8 楼 dwangel 2007-01-19  
  

花了几天时间终于把东西做出来了。

项目发布给大家看看。

因为包含了依赖的jar包,比较大,就不在这里放附件了。
放到我自己的网站上。
http://dwangel.mudfans.cn/projects/dyndao.rar
用eclipse做的项目。
7 楼 stamen 2007-01-12  
希望给出代码,好象不是很懂你的意思。
6 楼 yananay 2007-01-12  
不是好的解决方案....
不过对于特定的项目还是可以的.
5 楼 dwangel 2007-01-12  
magice 写道
关键是这一步不好做,
DaoFactory检索dao interface所在的package里面接口的名字
嗯,原来以为reflect可以做到,后来查了一下,结果不行。

文件路径是可以遍历的。要不这部分类就不打包了,直接放到目录里?然后将目录作为classpath加入。
4 楼 magice 2007-01-12  
关键是这一步不好做,
DaoFactory检索dao interface所在的package里面接口的名字
3 楼 dhxyu 2007-01-12  
en
2 楼 dwangel 2007-01-12  
ronghao 写道
很不错的想法.关键是约定.service也可以直接引入包
对啊对啊,这样就不用每次都要为了加一个dao或者service还要改配置了。
1 楼 ronghao 2007-01-12  
很不错的想法.关键是约定.service也可以直接引入包

相关推荐

    java *spring工具类 方便在非spring管理环境中获取bean

    java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...

    Spring Boot: Bean definition overriding

    在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅...

    spring自动扫描和管理Bean的示例

    在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式地在配置文件中声明每个Bean,而是让Spring容器自动发现并管理应用中的组件。这一特性极大地简化了Spring应用的配置,提高了开发效率。...

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    Spring —Mybaits 自动生成dao、bean、map框架使用说明

    1.lib必须按照项目中的classpath中的顺序 不然 系统找不到类 2.框架能够自动生成类和dao层 3.框架集成了Spring 能够自动将bean、dao、service装载到SPring容器中,供调用

    详解Spring 中如何控制2个bean中的初始化顺序

    在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 问题场景 在实际开发中,我们经常会遇到...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    在Spring Boot框架中,普通类调用bean是常见的操作,特别是在构建复杂应用时。这篇博客“17. Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中...

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    Spring定义bean的三种方式和自动注入

    在上述例子中,`Student`类中的`teacher`字段使用`@Autowired`注解,Spring会自动找到`Teacher`类型的Bean进行注入。 总之,Spring提供了多种方式来定义和管理Bean,从XML到注解再到Java配置,使得开发更加灵活高效...

    spring自动生成bean项目

    在Spring框架中,Bean是核心概念,它代表了应用程序中的对象。这些对象由Spring容器管理,包括它们的创建、初始化、装配以及生命周期管理。在大型项目中,手动编写Bean的配置文件可能会变得繁琐且易出错。为了简化这...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式配置每个Bean,而是通过指定包路径来让Spring自动发现和管理Bean。本文将深入探讨这个主题,帮助你更好地理解和应用这一功能。 首先,让...

    LifeCycleBeanSpring:在Spring中实现生命周期bean

    在Spring框架中,管理Bean的生命周期是至关重要的。`LifeCycleBeanSpring`是一个关于如何在Spring中实现并管理Bean生命周期的实例。理解这个概念对于优化应用程序的性能和资源利用至关重要。下面我们将深入探讨...

    线程中获取spring 注解bean

    当需要在线程中获取Spring注解的bean时,有几种常见的方法: 1. **ThreadLocal**:Spring提供了一种名为`ThreadLocalTargetSource`的特殊`TargetSource`实现,可以将bean实例绑定到当前线程。这样,每个线程都有其...

    详解Spring中Bean的生命周期和作用域及实现方式

    在本文中,我们介绍了Spring中Bean的生命周期和作用域及实现方式。了解Bean的生命周期和作用域是非常重要的,因为它们决定了Bean的生命周期和可用性。同时,掌握了Bean的实现方式,可以更好地使用Spring框架来管理...

    Spring中关于Bean的管理的课件

    12. **BeanFactoryAware**:Bean可以通过实现这个接口获取到BeanFactory实例,从而在运行时能够访问到Spring容器的其他服务。 13. **ApplicationContextAware**:类似于BeanFactoryAware,但提供的是...

    spring中的bean

    在本篇中,我们将深入探讨"Spring中的Bean"这一主题,包括Bean的定义、配置以及如何在实际应用中使用。 首先,我们需要理解什么是Spring中的Bean。在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring...

    Spring在应用中获得Bean的方法

    总结来说,Spring提供多种方式让我们在应用中获取Bean,包括直接通过名称、类型,或者利用注解实现自动装配。了解这些机制,有助于我们更好地理解和使用Spring框架,提高代码的可维护性和灵活性。同时,源码分析能...

    spring bean life cycle

    4. **正常服务**:Bean现在完全初始化并准备好使用,可以在应用程序中被其他Bean引用,执行业务逻辑。 5. **销毁**:当Spring容器关闭时,或Bean的`destroy-method`属性指定的方法,或实现了`DisposableBean`接口的...

    spring几种Dao支持配置

    使用`EntityManagerFactoryBean`创建`EntityManagerFactory`,然后在DAO中注入`EntityManager`。Spring Data JPA则进一步简化了DAO实现,通过接口方法名映射到查询,减少了手动编写JPQL或Criteria查询的需求。 5. *...

    spring bean 属性总结

    在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件或注解来定义、配置和管理Beans。下面将深入探讨`&lt;beans&gt;`、`&lt;bean&gt;`及其属性,以及其他相关的配置元素。 ...

Global site tag (gtag.js) - Google Analytics