最困难的时期已经过去,配置好环境之后下一步就是写一个测试程序跑一下。由于我主要是为了整合Hibernate,所以测试程序就以此为前提了。
Hibernate整合本身比较简单,但如果想把框架设计得更加灵活、耦合性更低,支持以插件方式添加新的数据库表映射以及数据库操作将会比较麻烦,会涉 及到SessionFactory的生成,这些问题后续文章会陆续谈到。我们这里采用的例子是一个典型的基于角色的权限校验系统,简化后我们不再关心持久 层,只来讨论与Spring结合是如何配置的问题。
首先建一个用来注册实体类的接口,可以动态监控数据库实体类的注册与销毁。接口相当简单,代码如下:
java 代码
1.package wanged.core.persistent.entity;
2.
3.@SuppressWarnings("unchecked")
4.public interface EntityRegister {
5. Class[] register(); // 返回需要注册的实体类的数组
6.}
这个接口单独作为一个Bundle(命名为wanged_core_persistent_entity_register),MANIFEST.MF中只需要导出该接口所在的包供其他Bundle引用即可。
现在需要实现接口了,这个接口会被用来声明一类服务,这样就可以利用OSGi的服务来达到动态添加数据库表映射的目的。
建一个包含实体类的Bundle(命名为wanged_security_entity),其实就是一个插件工程,为简单起见就叫Bundle,下同。新建一个类实现EntityRegister接口,代码如下:
java 代码
1.package wanged.security.entity;
2.
3.import java.util.ArrayList;
4.import wanged.core.persistent.entity.EntityRegister;
5.
6.@SuppressWarnings("unchecked")
7.public class SecurityEntityRegisterImpl implements EntityRegister{
8.
9. public Class[] register() {
10. ArrayList cList = new ArrayList();
11.
12. cList.add(Role.class); // 用户角色实体类Role
13. cList.add(User.class); // 用户信息实体类User
14.
15. return cList.toArray(new Class[cList.size()]);
16. }
17.}
MANIFEST.MF 中需要引入EntityRegister接口所在的包,否则会找不到该接口。另外还需要导出Role和User所在的包,以便其他Bundle调用。现在 类建好了,需要声明我们的服务了。Spring和OSGi结合可以省去DS的配置文件,这也是上一篇文章在导入所需Bundle时没有引入DS相关的 Bundle的原因。Spring可以在META-INF/spring目录下查找所有的xml文件,并自动解析生成其中定义的Bean。下面我们建一个 bean.xml的文件来声明服务,内容如下:
xml 代码
1.<osgi:service interface="wanged.core.persistent.entity.EntityRegister">
2. <bean class="wanged.security.entity.SecurityEntityRegister">
3.</osgi:service>
在这个xml文件中,我们声明了一个服务,用来注册权限管理中使用的实体类User和Role。
现在是万事俱备只欠东风,服务已经声明,唯独缺少使用该服务的Bundle。建一个Bundle(命名为wanged_core_persistent),新建一个测试类TestEntityRegister,代码如下:
java 代码
1.package test.core.persistent;
2.
3.import wanged.core.persistent.entity.EntityRegister;
4.
5.public class TestEntityRegister{
6.
7. // 由于要注册多个这样的服务,所以参数为数组格式
8. @SuppressWarnings("unchecked")
9. public void setEntityRegister(EntityRegister[] erArr) {
10. for(EntityRegister er: erArr) {
11. System.out.println("EntityRegister class : " + er.getName());
12. for(Class c : er.register()) {
13. System.out.println(c.getName());
14. }
15. }
16. }
17.}
在MANIFEST.MF中引入包wanged.core.persistent.entity。在META-INF中添加spring/bean.xml,并定义该测试类:
xml 代码
1.<osgi:reference id="entityRegister"
2. interface="wanged.core.persistent.entity.EntityRegister" cardinality="1..n" />
3.
4.<bean id="testEntityRegister" class="test.core.persistent.TestEntityRegister">
5. <property name="entityRegister" ref="entityRegister" />
6.</bean>
注意上面的cardinality设置正是和setEntityRegister()方法的数组参数对应。
分享到:
相关推荐
开发者在使用Spring OSGi时,需要了解如何编写OSGi兼容的jar包,以及如何在Spring配置文件中声明和管理OSGi服务。此外,调试和测试OSGi环境下的应用程序也是一项挑战,因为它们涉及到复杂的生命周期管理和依赖关系...
- Spring DM通过读取Spring配置来管理OSGi服务,使得开发者可以使用熟悉的Spring XML配置来声明服务和依赖。 4. **服务注册与发现** - 在OSGi中,服务是通过注册到服务注册表进行发布的,其他bundle可以通过查询...
Spring OSGi 1.2.1版本包含了所有必要的依赖,这使得开发者无需单独配置即可快速搭建基于OSGi的Spring环境。其中,"spring-osgi-1.0.2"可能是该版本的核心库文件,提供了实现Spring和OSGi集成的关键API和实现。 ...
6. **Configuration Files**:OSGi配置文件,如`.cfg`文件,用来配置OSGi服务和Spring的bean。 7. **Bundles**:Spring应用被打包成OSGi兼容的bundle(JAR文件),它们可以被OSGi容器加载并执行。 在实际开发中,...
与Spring框架的XML配置类似,Blueprint使得我们在OSGi环境中能够以声明式方式管理我们的应用程序组件。 接下来,我们将Spring框架与OSGi结合。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力著称,...
Spring DM的主要目标是简化OSGi服务的生命周期管理和配置,使得开发者能够像在非OSGi环境中一样轻松地使用Spring。 OSGi是一种基于Java的模块化系统,它定义了一个标准的框架,用于创建、部署和管理模块化应用程序...
### OSGi与Spring:Spring DM开发环境配置详解 #### 一、引言 随着软件架构的不断发展,模块化和微服务化的趋势日益明显。在Java领域,OSGi(Open Service Gateway Initiative)作为一套成熟的技术标准,为实现模块...
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种面向服务的框架,能够提供动态模块部署和管理的能力。Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入...
在这个登录应用案例中,我们可能首先创建一个Spring配置,定义一个表示用户的实体类,以及对应的Mybatis映射文件。接着,创建一个Spring MVC控制器,处理登录请求,验证用户名和密码,然后调用业务逻辑服务。业务...
在OSGi(Open Service Gateway Initiative)环境中配置Spring事务可能会遇到一些挑战,因为OSGi的模块化特性使得类加载和依赖管理变得复杂。本篇文章将详细探讨如何在OSGi环境中正确配置Spring事务管理。 首先,...
它允许开发者使用熟悉的Spring配置来定义服务和引用,简化了OSGi环境下的应用开发。 2. 自动化服务注册和发现:Spring DM会自动将Spring Bean注册为OSGi服务,并自动发现其他服务进行注入,降低了服务集成的复杂度。...
### 基于OSGi和Spring开发Web应用的深度解析 #### OSGi与Spring的融合价值 OSGi,作为企业级应用领域的新兴工业标准,以其面向服务(接口)的核心理念和动态模块部署的能力,成为了现代软件架构设计的重要组成部分...
1. **模块化配置**:Spring配置可以在OSGi的 Bundle 内部定义,使得配置更加隔离和灵活。 2. **自动服务发现**:通过OSGi服务注册表,Spring可以自动发现并注入依赖的服务。 3. **生命周期管理集成**:Spring容器...
《OSGI实战:结合Spring DM》 OSGI(Open Service Gateway Initiative)是一种模块化系统和服务平台,它允许软件以模块化的方式进行构建、部署和管理。OSGI在Java世界中扮演着重要的角色,因为它提供了动态性、可...
4. **灵活的配置**:Spring DM 支持灵活的配置选项,允许开发者根据具体需求定制Spring应用程序的行为。 #### 四、使用Spring Dynamic Modules的理由 企业级应用程序开发面临着越来越复杂的挑战,包括模块之间的...
每个bundle内部,通过Spring的配置文件(如`computeAdd-context.xml`)声明bean,并将其注册为OSGi服务。这样,Spring-DM会自动管理这些服务的生命周期,并使得其他bundle可以通过OSGi服务发现机制找到并使用它们。 ...
标题 "OSGISpring OSGISpring" 暗示了我们即将探讨的是关于OSGI(Open Service Gateway Initiative)框架与Spring框架的集成。OSGI是一种模块化系统和Java应用程序执行环境,它允许开发者将应用程序分解为独立的服务...