簡體   English   中英

JSF 2.2和Spring 4和CDI在不同的層上而不會丟失Spring功能

[英]JSF 2.2 and Spring 4 and CDI on different layers without losing Spring features

閱讀完所有文章后,我有些困惑。 如果我在服務層中使用Weld Framework而不是簡單的Spring限定符,則不需要使用其他服務。 我有一項使用JavaMailSender的服務。 我只想擁有在JSF控制器層中使用AOP的能力。

在閱讀Spring(甚至Spring 3)的關於支持JSR-229和JSR-330的文章后,我感到非常困惑

Spring 3和JSR-330 @Inject And @Named示例

這是否意味着我可以那樣做並且不會失去使用AOP之類的Spring功能的可能性? (是的,我認為。)

import javax.inject.Inject;
import javax.inject.Named;
import java.io.Serializable;

@Named("newClientController")
@ViewScoped
public class NewClientController implements Serializable {
@Inject
private ClientService clientService;

////......
}

@Service
@Transactional
public class ClientService {

public ClientService(){
int i = 0;
}

@Autowired
@Qualifier("clientDAOMyBatis")
private ClientDAO clientDAO;
//....
}

我研究了幾天,發現了幾組決策

1) Spring和CDI之間的橋梁

https://stackoverflow.com/questions/5510144/cdi-bean-accessing-spring-beans 使用CDI @Inject注入Spring bean

優點:

  1. 簡單的決定
  2. 不要失去Spring功能

缺點:

  1. 他們的聲譽令人懷疑。 (臭蟲!!!)

2)使用Spring @Component並為JSF創建自定義ViewScope http://blog.primefaces.org/?p=702

優點:

  1. 簡單的決定
  2. 不要失去Spring功能

缺點:

  1. 缺少對銷毀回調的支持實現。

3)可序列化的Spring Bean(有點奇怪)

https://codereview.stackexchange.com/questions/23790/spring-autowiring-in-managed-beans-with-support-for-serialization-is-this-safe

請不要關閉這個問題。 我知道存在許多相關問題。 您能為我提供一些解決該問題的方法嗎?

PS我使用MyBatis,它不支持JPA和基於Spring Java的配置,因為我想將此應用程序部署在雲中。

如果您希望JSF托管Bean上具有所有Spring功能,我認為將Spring用作JSF的CDI是最好的方法(列表中的第二個選擇)。 要創建自定義ViewScope,您可以嘗試以下操作

http://blog.harezmi.com.tr/uncategorized/spring-view-scope-for-jsf-2-users/

這是將ViewScope與Spring一起使用的更好的實現。

-更新-

我在github上添加了一個示例項目。 你可以看到。

https://github.com/bhdrk/Tutorials/tree/master/spring4-jsf22-integration

我的一位博客讀者報告說,Spring bean在最新版本的Spring 3.2(以及希望是Spring 4)中可序列化。 因此,您可以使用標准的JSF 2.2 @ViewScoped控制器,並將Spring Bean作為托管屬性注入。 這有點不尋常,因為這是第三個注釋(@ManagedProperty而不是@Autowire或@Inject)。 但據報道,它運行良好。

我的博客上閱讀完整的故事(在這里復制它太長了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM