2015-09-19 72 views
0

爲了在我的遺留Web應用程序(Tomcat 8.0.26)中提供POJO並具有發送ActiveMQ消息的能力,我採用了建議引入Camel(2.15.2)/ Spring (4.2.1)純粹用於管理池式MQ連接。我希望沒有更簡單的方法。注入彈簧豆到傳統的Web應用程序POJO

以Spring方式做事我認爲所有事情都需要基於MVC體系結構,並使用支持HTTP servlet的控制器訪問servlet上下文,因此需要Spring上下文以便將beanFactory bean注入到用@註釋的類中Controller和@Service(實際上必須有一個Spring @Controller類,使Spring能夠注入@Service類

但是,正如我所說的,這是傳統代碼,它不會使用spring web框架

經過很多痛苦,似乎我能夠將beanFactory bean注入到我的POJO中的唯一方法就是使用AspectJ和Weaving路線。 e我沿着這條路走下去,有人可以告訴我這是目前最好的方法(我讀過的描述這個解決方案的是2011 Can't get Spring to inject my dependencies - Spring Newbie)?你能指點我的文檔和一個工作的例子嗎?

非常感謝。

+0

這已經足夠接近了(我在移動設備上,並且沒有在Spring標籤上使用dupehammer),我將其標記爲與我的寫作重複。我建議使用AspectJ方法;它只需要最少的實施工作就可以滿足您的用例 – chrylis

回答

0

1)的AspectJ與@Configurable

在你@Configuration註解的類/ ES

,你可以添加一些註釋 @Configuration @EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED) @EnableSpringConfigured @EnableAspectJAutoProxy

,使AspectJ和設置@Configurable註解, 你需要將aspectj lib導入到你的項目中並在你的tomcat lib文件夾中添加spring tomcat可監控的java代理(看看這裏,它展示瞭如何配置tomcat)http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/instrument/classloading/tomcat/TomcatInstrumentableClassLoader.html

如果您打算使用「新」來創建您的pojos,這不會對您有所幫助 MyPojo p = new MyPojo(); //對此沒有黑魔法,你需要自己滿足依賴關係),但是當你通過像hibernate這樣的框架加載一些實體並且你想向它們注入某些東西時會有幫助。@Configurable它是一個選項可以在這些情況下評估,因爲你所描述的我寧願不使用它。

2)你可以使用一些靜態組彈簧豆一些靜態方法,並從您的POJO使用它們,像

class Util{

private static SprintBeanWithJmsSupport x;

public static setSpringBeanToHandleJmsMessages(SprintBeanWithJmsSupport x){ Util.x = x; }

public static sendJmsMessage(JmsMessage m){ x.sendMessage(m) } } ,您可以用Util.sendJmsMessage(去......)

這有點低劣的,但它不工作,我不親自喜歡這種方法

3)設置你的POJO的春天豆時,他們需要使用它們(也許背後適合您的域了一些不錯的接口)

如果你使用spring mvc,你可能最終會得到一些控制器,這些控制器會使用一些服務(通常它們處理安全/數據庫訪問,並且是啓動「用例」的入口點),因爲這些層中的所有東西都被處理春天它將是非常簡單的通過彈簧豆處理jms消息傳遞到你的pojos,這對我來說似乎是一個很好的方式來處理這個問題

我主要是基於內存和東西可能不完全準確,加上我的英語是..它是什麼,所以希望這可以有所幫助。