日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

osgi和spring区别_OSGI和Spring动态模块–简单的Hello World

發布時間:2023/12/3 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 osgi和spring区别_OSGI和Spring动态模块–简单的Hello World 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

osgi和spring區別

在此姿勢中,我們將采用使用OSGi進行的第一個實現,并使用Spring Dynamic Modules改進應用程序。

Spring動態模塊(Spring Dm)使基于OSGi的應用程序的開發更加容易。 這樣,服務的部署就容易得多。 您可以像其他任何Spring Bean一樣注入服務。

因此,讓我們從Spring dm開始。

首先,您需要下載Spring Dm Distribution 。 在本文中,我使用了具有依賴關系的發行版,而我將僅使用以下庫:

com.springsource.net.sf.cglib-2.1.3.jar com.springsource.org.aopalliance-1.0.0.jar log4j.osgi-1.2.15-SNAPSHOT.jar com.springsource.slf4j.api-1.5.0.jar com.springsource.slf4j.log4j-1.5.0.jar com.springsource.slf4j.org.apache.commons.logging-1.5.0.jar org.springframework.aop-2.5.6.SEC01.jar org.springframework.beans-2.5.6.SEC01.jar org.springframework.context-2.5.6.SEC01.jar org.springframework.core-2.5.6.SEC01.jar spring-osgi-core-1.2.1.jar spring-osgi-extender-1.2.1.jar spring-osgi-io-1.2.1.jar

當然,您可以將Spring 2.5.6庫替換為Spring 3.0庫。 但是對于本文而言,Spring 2.5.6就足夠了。

因此,從服務捆綁開始。 回想一下,該捆綁軟件導出了一項服務:

package com.bw.osgi.provider.able;public interface HelloWorldService {void hello(); }package com.bw.osgi.provider.impl;import com.bw.osgi.provider.able.HelloWorldService;public class HelloWorldServiceImpl implements HelloWorldService {@Overridepublic void hello(){System.out.println("Hello World !");} }

這里沒有要做的任何更改。 現在,我們可以看到激活器:

package com.bw.osgi.provider;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration;import com.bw.osgi.provider.able.HelloWorldService; import com.bw.osgi.provider.impl.HelloWorldServiceImpl;public class ProviderActivator implements BundleActivator {private ServiceRegistration registration;@Overridepublic void start(BundleContext bundleContext) throws Exception {registration = bundleContext.registerService(HelloWorldService.class.getName(),new HelloWorldServiceImpl(),null);}@Overridepublic void stop(BundleContext bundleContext) throws Exception {registration.unregister();} }

因此,在這里,我們將簡單化。 讓我們刪除這個類,它對于Spring Dm不再有用。

我們將讓Spring Dm為我們導出捆綁包。 我們將為此捆綁包創建一個Spring上下文。 我們只需要在文件夾META-INF / spring中創建一個文件provider-context.xml即可。 這是XML文件中的簡單上下文,但是我們使用新的名稱空間注冊服務“ http://www.springframework.org/schema/osgi ”。 因此,讓我們開始:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:osgi="http://www.springframework.org/schema/osgi"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd"><bean id="helloWorldService" class="com.bw.osgi.provider.impl.HelloWorldServiceImpl"/><osgi:service ref="helloWorldService" interface="com.bw.osgi.provider.able.HelloWorldService"/> </beans>

OSGi特有的唯一內容是osgi:service聲明。 此行表明我們使用接口HelloWorldService作為服務名稱將helloWorldService注冊為OSGi服務。

如果將上下文文件放在META-INF / spring文件夾中 ,Spring Extender將自動檢測到它,并創建一個應用程序上下文。

現在,我們可以轉到消費者捆綁包。 在第一階段,我們創建了該消費者:

package com.bw.osgi.consumer;import javax.swing.Timer;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import com.bw.osgi.provider.able.HelloWorldService;public class HelloWorldConsumer implements ActionListener {private final HelloWorldService service;private final Timer timer;public HelloWorldConsumer(HelloWorldService service) {super();this.service = service;timer = new Timer(1000, this);}public void startTimer(){timer.start();}public void stopTimer() {timer.stop();}@Overridepublic void actionPerformed(ActionEvent e) {service.hello();} }

目前,這里沒有任何更改。 可以使用@Resource注釋代替構造函數的注入,但這在Spring 2.5.6和Spring Dm中不起作用(但在Spring 3.0中很好用)。

現在激活器:

package com.bw.osgi.consumer;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference;import com.bw.osgi.provider.able.HelloWorldService;public class HelloWorldActivator implements BundleActivator {private HelloWorldConsumer consumer;@Overridepublic void start(BundleContext bundleContext) throws Exception {ServiceReference reference = bundleContext.getServiceReference(HelloWorldService.class.getName());consumer = new HelloWorldConsumer((HelloWorldService) bundleContext.getService(reference));consumer.startTimer();}@Overridepublic void stop(BundleContext bundleContext) throws Exception {consumer.stopTimer();} }

不再需要注射。 我們可以在此處保持計時器的啟動,但是再一次,我們可以使用框架的功能來啟動和停止計時器。 因此,讓我們刪除激活器并創建一個應用程序上下文以創建使用者并自動啟動它,并將其放入META-INF / spring文件夾中 :

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:osgi="http://www.springframework.org/schema/osgi"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd"><bean id="consumer" class="com.bw.osgi.consumer.HelloWorldConsumer" init-method="startTimer" destroy-method="stopTimer"lazy-init="false" ><constructor-arg ref="eventService"/></bean><osgi:reference id="eventService" interface="com.bw.osgi.provider.able.HelloWorldService"/> </beans>

我們使用了init-method和destroy-method屬性來開始和停止框架的時間,并使用構造函數arg注入對服務的引用。 使用osgi:reference字段并使用接口作為服務的鍵來獲取對該服務的引用。

這就是我們與該捆綁包有關的全部。 比第一個版本簡單得多嗎? 除了簡化之外,您還可以看到源不依賴于OSGi或Spring Framework,這是純Java語言,這是一個很大的優勢。

Maven POM與第一階段的相同,只是我們可以減少對osgi的依賴。

提供者:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>OSGiDmHelloWorldProvider</groupId><artifactId>OSGiDmHelloWorldProvider</artifactId><version>1.0</version><packaging>bundle</packaging><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions><Bundle-SymbolicName>OSGiDmHelloWorldProvider</Bundle-SymbolicName><Export-Package>com.bw.osgi.provider.able</Export-Package><Bundle-Vendor>Baptiste Wicht</Bundle-Vendor></instructions></configuration></plugin></plugins></build> </project>

消費者:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>OSGiDmHelloWorldConsumer</groupId><artifactId>OSGiDmHelloWorldConsumer</artifactId><version>1.0</version><packaging>bundle</packaging><dependencies><dependency><groupId>OSGiDmHelloWorldProvider</groupId><artifactId>OSGiDmHelloWorldProvider</artifactId><version>1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions><Bundle-SymbolicName>OSGiDmHelloWorldConsumer</Bundle-SymbolicName><Bundle-Vendor>Baptiste Wicht</Bundle-Vendor></instructions></configuration></plugin></plugins></build> </project>

我們可以使用maven install構建兩個捆綁包。 因此,讓我們在Felix中測試我們的東西:

wichtounet@Linux-Desktop:~/Desktop/osgi/felix$ java -jar bin/felix.jar _______________ Welcome to Apache Felix Gogog! install file:../com.springsource.slf4j.org.apache.commons.logging-1.5.0.jar Bundle ID: 5 g! install file:../com.springsource.slf4j.log4j-1.5.0.jar Bundle ID: 6 g! install file:../com.springsource.slf4j.api-1.5.0.jar Bundle ID: 7 g! install file:../log4j.osgi-1.2.15-SNAPSHOT.jar Bundle ID: 8 g! install file:../com.springsource.net.sf.cglib-2.1.3.jar Bundle ID: 9 g! install file:../com.springsource.org.aopalliance-1.0.0.jar Bundle ID: 10 g! install file:../org.springframework.core-2.5.6.SEC01.jar Bundle ID: 11 g! install file:../org.springframework.context-2.5.6.SEC01.jar Bundle ID: 12 g! install file:../org.springframework.beans-2.5.6.SEC01.jar Bundle ID: 13 g! install file:../org.springframework.aop-2.5.6.SEC01.jar Bundle ID: 14 g! install file:../spring-osgi-extender-1.2.1.jar Bundle ID: 15 g! install file:../spring-osgi-core-1.2.1.jar Bundle ID: 16 g! install file:../spring-osgi-io-1.2.1.jar Bundle ID: 17 g! start 5 7 8 9 10 11 12 13 14 15 16 17 log4j:WARN No appenders could be found for logger (org.springframework.osgi.extender.internal.activator.ContextLoaderListener). log4j:WARN Please initialize the log4j system properly. g! install file:../OSGiDmHelloWorldProvider-1.0.jar Bundle ID: 18 g! install file:../OSGiDmHelloWorldConsumer-1.0.jar Bundle ID: 19 g! start 18 g! start 19 g! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! stop 19 g!

如您所見,它運行完美!

總之,Spring Dm確實使使用OSGi的開發更加容易。 使用Spring Dm,您還可以啟動捆綁包。 它還使您能夠制作Web捆綁包并輕松使用OSGi綱要的服務。

以下是這兩個項目的來源:

  • OSGiDmHelloWorldProvider來源
  • OSGiDmHelloWorldConsumer來源

這是兩個內置的Jars:

  • OSGiDmHelloWorldProvider-1.0.jar
  • OSGiDmHelloWorldConsumer-1.0.jar

這是完整的文件夾,包括Felix和Spring Dm: osgi-hello-world.tar.gz

參考: OSGI和Spring動態模塊–我們的JCG合作伙伴 Baptiste Wicht的 @ @Blog(“ Baptiste Wicht”)提供的 簡單Hello World 。

相關文章 :
  • OSGi –具有服務的簡單Hello World
  • OSGi將Maven與Equinox結合使用
  • 真正的模塊化Web應用程序:為什么沒有開發標準?
  • Java模塊化方法–模塊,模塊,模塊

翻譯自: https://www.javacodegeeks.com/2011/11/osgi-and-spring-dynamic-modules-simple.html

osgi和spring區別

總結

以上是生活随笔為你收集整理的osgi和spring区别_OSGI和Spring动态模块–简单的Hello World的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区四区 | 日本三级久久久 | 善良的老师伦理bd中字 | 精品伦精品一区二区三区视频密桃 | 亚洲少妇18p | 成人毛片在线观看 | 午夜av大片 | jjzz日本女人 | 一区二区三区免费看视频 | 美国美女群体交乱 | 久久久久亚洲av成人网人人软件 | 国产精品午夜电影 | 亚洲清纯唯美 | 久久成人18免费观看 | av福利在线看 | 国产日韩一区二区 | 午夜久久久久久久久 | 日本三级吹潮 | 综合视频一区二区 | 人人干av | 超碰免费av | 欧美激情在线观看视频 | 涩涩视频软件 | 麻豆传媒网站在线观看 | 水蜜桃av无码 | 樱花av在线 | 日本护士毛茸茸 | 黄色av免费 | 朴麦妮原版视频高清资源 | 日本免费看 | 国产欧美一区二区三区在线看 | 尤物最新网址 | 韩国一区二区三区视频 | 国偷自产av一区二区三区麻豆 | 成人毛片基地 | 色婷婷久久一区二区三区麻豆 | 成人a视频 | 精品一区二区三区四区视频 | 国产精品久久亚洲 | 久久久久久免费 | 久久精品国产亚洲AV熟女 | 8x国产一区二区三区精品推荐 | 九月婷婷 | 成人在线观看一区二区 | 一区二区三区免费在线视频 | 国产情侣第一页 | 97精品一区二区 | 91精品国产综合久久久蜜臀九色 | 三年中文在线观看免费观看 | 2021天天干 | aa毛片视频 | 久操中文| 91在线观看免费高清完整版在线观看 | 国产精品一区二区三区四区在线观看 | 免费av福利| 国内自拍偷拍视频 | 国精品一区二区 | 巨大胸大乳奶电影 | 成人免费毛片日本片视频 | 免费观看毛片 | 久草成人在线 | 黄色网址你懂得 | 国产成人精品一区二三区四区五区 | 成人xxxx | 欧美三级三级三级爽爽爽 | 国产午夜精品免费一区二区三区视频 | 激情一级片 | 91av在线免费视频 | 日干夜干天天干 | 午夜在线看片 | 神秘电影永久入口 | 久久久午夜精品福利内容 | 色av综合 | 欧州一区 | 日本视频二区 | 成人看片 | 中日韩在线播放 | 五月综合激情日本mⅴ | 午夜影院久久久 | 能免费看18视频网站 | 亚洲精品一区二区三区在线 | 国产精品丝袜黑色高跟鞋 | 校园春色在线观看 | 日本xxxxxxxxx| 久操超碰 | 欧洲视频一区二区 | 久久香蕉热 | 色呦呦视频在线观看 | 欧美老熟妇又粗又大 | 国产免费观看一区 | 欧美国产日韩一区 | 国产浪潮av | av字幕在线| 波多野吉衣一区二区三区 | 日韩精品欧美 | 国产三级国产精品国产国在线观看 | 日韩二区在线观看 | 91在线影院 | 日韩高清影视在线观看 |