Questions tagged «spring»

Spring是一个基于模块的开源框架,用于构建健壮的Java / Java EE应用程序。

2
是否首选Spring + Hibernate而不是EJB 3?
我的感觉是,每当新的JEE项目开始(适用这些技术的地方)时,人们就会喜欢使用Spring + Hibernate的组合而不是EJB 3。 似乎甚至建议初级程序员而不是EJB。 这是个人喜好还是有相关原因?(例如,由早期EJB版本造成的个人伤痕导致对EJB的不信任或技术膨胀与性能原因或学习曲线有关)?

2
面向Java初学者的RESTful服务的结构
就Java Web开发技能而言,我相对较新。我有一个项目,根据我对API的了解,我认为该项目可以很好地成为RESTful服务的候选人。我正在尝试了解应该如何构造的详细信息,但在谷歌搜索和阅读已有资料方面并没有真正涉足。我希望根据我对该主题的知识和假设,这篇文章能够带来一些验证和/或重定向。 我目前的假设是我的RESTful服务将具有以下结构: 数据库数据(SQL)。 一个ORM(我使用的是相对不受欢迎的ORM,称为CPO,但是对于大多数人来说,它只会被Hibernate取代)。 一个Java管理器类,其方法与ORM进行对话以获得数据 一个Java控制器类,用于处理请求映射,并用于@ResponseBody通过HTTP谓词来指导/处理URL和如何处理数据的动作(http://mysite.com/computers/dell可能GET带有单词“ dell”的请求URL中的参数是一个参数,该参数将返回有关Dell计算机的信息的JSON数组)。 该服务应使用Spring Boot进行,或者以某种方式能够独立存在并且独立于任何其他应用程序。 现在假设以上内容是正确的,那么我将(在非常基本的水平上)拥有一个RESTful服务,任何应用程序都可以使用该服务来使用和使用数据。 所以说我有了我的Web应用程序。假设我正在制作一个有关计算机硬件信息的Web应用程序,而我正在使用Spring来构建此Web应用程序。这是我的假设: 作为JSP,我会有很多看法,而这些JSP包含HTML,CSS和JavaScript。JavaScript将根据需要处理对此应用程序控制器的AJAX调用(如下)。 该Web应用程序还将拥有自己的控制器来处理应用程序的URL请求和路由,然后该控制器将使用该ModelAndView对象或类似的东西与RESTful服务的控制器“对话”,获取正在传递的任何数据,然后将该数据传递回视图(JavaScript,JSP等)进行显示。 我在这里吗?我知道RESTful服务也有一个身份验证方面,但是从概念上讲我还不存在(我的项目将在专用网络中使用,因此此时安全性不是优先事项)。 非常感谢任何见解,批评,知识,反馈或澄清。

1
为什么在服务器和客户端之间共享接口是一个坏主意?
当我发现一种在HTTP服务器与其客户端之间共享接口的方法时,我正在阅读Spring Cloud Netflix文档。他们将这个示例用于微服务,尽管没有理由不能将其扩展到通用HTTP通信: // The shared interface, in a common library public interface UserService { @RequestMapping(method = GET, value = "/users/{id}") User getUser(@PathVariable long id); } // The controller, on the server @RestController public class UserResource implements UserService { } // The same interface used for the client @FeignClient("users") public …

1
REST服务作为2000多个客户端计算机的应用程序服务器。这是个好主意吗?
我们将使用javaFx中的UI构建一个系统,该用户界面将部署到2000台以上的计算机(最低数量为2000,但将会更多-可以达到5000台计算机)。 由于其他原因/限制,必须将其安装在计算机上,因此我们无法使用Web浏览器界面进行操作。 2000多台计算机将位于不同的地理位置组。通常,连接是好的,但在更偏远的位置可能不是很好。 我正在考虑使用Spring + Spring Boot + Spring Data(java)构建REST服务集群,而不是直接访问数据库。 REST服务将接受并返回Json。 我认为这是个好主意,因为: 该服务将充当数据库连接池(我认为数据库上的2000多个连接会引起问题); 可能有一个将日志传送到其他只读数据库的数据库来服务某些查询; 随着我们可以添加更多机器来运行REST服务,它将更好地扩展; 出于安全性和带宽节省的原因,可以在压缩中使用HTTPS。 无需重新部署2000多台计算机,就可以对业务实体进行一些集中式更改。 它与其他系统更好地集成(只需将其指向REST服务)。 这真的是个好主意吗? 您可以分享一些正面或负面的经验吗? 谢谢。
11 java  design  rest  spring 

3
DDD-贫血域模型是反模式吗?我们应该使用富域模型吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 Enes 和Fowler很久以前就批评了贫血症领域模型,因为它显然违反了面向对象的原理等。DDD社区显然与此声明保持一致。 但是,近年来,一直有不同意见的人声称它根本不是反模式,并且它是遵循SOLID原则的一个示例。 我已经使用Spring Framework工作了很多年。每个公司中的每个项目都始终使用服务于贫乏模型(JPA实体)的存储库,其中包含业务逻辑的服务层。此外,大多数样本,甚至包括Spring员工的官方样本,都展示了这种工作方式。 我的问题是:贫血领域模型是否仍被视为反模式?我们所有人都在做关于DDD的事情吗?您是否不认为拥有Rich Domain模型违反了SOLID原则?

1
如何迁移现有的旧版Web应用以使用OAuth2
我目前有一个拥有15年历史的单片式Web应用程序,具有近一百万的用户,使用自制的授权和身份验证系统:JAAS,用户名和密码存储在具有基本密码哈希的DB中,还有一些2FA个人验证问题(不同哈希算法等)。 在接下来的12-18个月中,我将全面检查应用程序,主要侧重于UI,但同时还要慢慢升级基础部分(升级到Spring,Spring Security等)。在这个项目中,我们决定逐个模块解决UI升级;完成每个模块后,使其可用;一个绝好的机会,可以将整体拆分成单独的Web应用程序(所有应用程序都保持相同的UX设计)。 我在计划和解决方案时遇到的问题是在身份验证和授权级别。我需要一个跨领域的解决方案,该解决方案应涵盖所有模块,以便将用户从一个Web应用程序定向到另一个Web应用程序时,这是一个无缝过渡-他们甚至都不知道他们位于不同的Web应用程序上。OAuth2听起来是完美的解决方案。 我一直在努力了解如何整合这一点。我是否必须构建自己的自定义OAuth2服务器?那让我感到震惊。但是我该如何: 将我所有的用户帐户和授权过程迁移到第三方OAuth2服务器 自定义外观以匹配我的应用程序的其余部分(不确定这将有多容易/可能) 阻止通过第三方服务器连接时出现典型的“应用程序XYZ想要访问您的帐户的权限...”弹出窗口?(例如:Google OpenID,Facebook等)。 我的目标是为用户提供从当前状态到新状态的无缝过渡,但提供创建独立的Web应用程序的功能,这些功能都可以在Web应用程序外部进行身份验证和授权。

2
有效跟踪从开发人员到产品的配置更改
这个问题以Spring Boot服务为例,但是可以是任何技术。 假设以下内容: 环境(dev / QA / prod)由不同的团队拥有。这意味着开发人员不能访问生产配置。 配置(例如application.properties)是外部化的,即不是二进制文件的一部分 相同的二进制文件/程序包(例如,service.jar)部署在每个环境中,并由自动部署控制 虽然对二进制工件(service.jar)的更改会自动传播到每个环境,但是对配置的更改仍需要手动干预,这不可避免地最终导致在每个环境中失去同步。 例如,假设开发团队在其环境中向application.properties添加了一些键值对。记录这些新密钥的最佳方法是什么,以便在操作团队中进行部署时,他们确切知道要添加哪些密钥,从而将启动新服务并由于缺少密钥而看到新服务失败的风险降到最低? 我知道将涉及手动步骤,但我想知道人们如何处理此问题并找到最有效的方法。

2
与离线系统同步
我正在设计一个系统,通过该系统,我将同步移动设备(具有嵌入式应用程序)中的业务数据,该数据会生成数据并将其发送回服务器。同步的每一行都会在数据库中生成特定的业务日志。 如果我同步的数据生成的日期(在同步数据内)晚于我的业务数据的最后修改日期,则我必须忽略它,而只需在数据库中添加日志即可。处理上载的数据后,将从数据库中获取数据并将其下载到设备。 由于写完后立即下载,同步必须是同步的。如果像这样的东西足以取代我现有的解决方案,那么仍然有可能采用读写器模式。更重要的是能够下载最新数据。该数据是整体获取的,目前没有实现差异(它可能会在以后出现,但这不会成为问题)。 我可能在同一个业务对象上运行多个同步,这不太可能,但是可能会发生,我希望能够处理它。除非使用嵌入式移动应用程序几天不重新同步,否则预计同步将持续几秒钟但不会持续几分钟。 同步处理的数据量预计不会很大。 因此,我最终在我的同步方法上使用了互斥,更确切地说,我正在使用Java,并且在写入方法上放置了同步,而不是整个同步过程都放在不阻止只读同步的位置。 我想知道 : 这样是否有意义?只要同步过程的数量和时间仍然可以接受。 一般来说,我应该看什么概念。奖励:Spring模块中是否有这些概念的实现。

2
逐渐将代码库移至依赖项注入容器
我有一个很大的代码库,其中包含许多“反模式”单例,带有静态方法的实用程序类以及使用new关键字创建自己的依赖项的类。这使得代码很难测试。 我想逐步将代码迁移到依赖项注入容器(在我的情况下是Guice,因为它是一个GWT项目)。从我对依赖注入的理解来看,它全有还是全无。所有类都由Spring / Guice管理,或者没有。由于代码库很大,因此我无法在一夜之间转换代码。所以我需要一种逐渐做到的方法。 问题是,当我从一个需要注入其他类的类开始时,我不能@Inject在那些类中使用简单的类,因为那些类尚未由容器管理。因此,这将创建一条长链,直至未注入任何地方的“顶级”类。 我看到的唯一方法是Injector暂时使/应用程序上下文通过单例全局可用,以便其他类可以从中获取托管bean。但这与不composition root向应用程序公开的重要思想相矛盾。 另一种方法是自下而上:从“高级”类开始,将它们包含在依赖项注入容器中,然后慢慢移至“较小”类。但是然后我不得不等待很长时间,因为我可以测试仍然依赖于全局变量/静态变量的较小的类。 实现这种逐步迁移的方式是什么? PS问题:依赖注入的渐进方法在标题上相似,但是它不能回答我的问题。

4
春季-对配置感到困惑吗?
我读过Spring的某个地方为配置提供了便利。但是Spring人员在配置方面带来了很多变化,以至于我现在真的很困惑使用xml配置或注释。 我希望有人建议使用xml和批注的surefire方法或经验法则。 SO上的示例表明,像我这样的许多初学者对配置感到困惑。 链接1 我似乎并没有掌握<context:annotation-config>and 背后的功能<context:component-scan>。 从我阅读的内容来看,它们似乎处理不同的注释(@ Required,@ Autowired等与@ Component,@ Repository,@ Service等),但从我阅读的内容来看,它们注册了相同的bean后处理器类。 更让我感到困惑的是annotation-config,<context:component-scan>... 连结2 我仍然有组件扫描标签: <context:component-scan base-package="com.mycompany.maventestwebapp" /> 但是我还有另一个标签(看起来有类似的任务),这个标签是: <annotation-driven /> 这两个标签有什么区别?另一个“奇怪”的事情是,前面的示例(不使用注释驱动的标签)与使用Spring MVC Template项目的STS创建的项目非常相似,但是如果我从其配置中删除了注释驱动的标签,文件项目无法运行,并给我以下错误:HTTP状态404 -... Spring 3.2不再需要cglib进行代理,但是较低版本使用cglib。引用springsource博客 为了生成此类代理,Spring使用了名为cglib的第三方库。不幸的是,该项目不再活跃。在Spring 3.2中,默认情况下很有可能Spring将使用Javassist代替。 这些足以表明Spring是对配置的困惑吗?
9 java  spring 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.