繁体   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