Questions tagged «spring»

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

7
Spring框架做什么?我应该使用它吗?为什么或者为什么不?
因此,我正在用Java启动一个全新的项目,并正在考虑使用Spring。我为什么要考虑春季?因为很多人告诉我我应该使用Spring!认真地说,每当我试图让人们解释Spring到底是什么或做什么时,他们永远无法给我一个直接的答案。我已经在SpringSource网站上查看了这些介绍,它们要么真的很复杂,要么真的是针对教程的,它们都没有给我一个很好的主意,为什么我应该使用它,或者它如何使我的生活更轻松。有时人们会抛出“依赖注入”这个术语,这使我更加困惑,因为我认为我对该术语的含义有不同的理解。 无论如何,这里有一些关于我的背景和我的应用程序的信息: 在Java中开发了一段时间,从事后端Web开发。是的,我进行了大量的单元测试。为了实现这一点,我通常制作(至少)一种方法的两个版本:一个使用实例变量,一个仅使用传递给该方法的变量。使用实例变量的一个调用另一个,提供实例变量。当进行单元测试时,我使用Mockito模拟对象,然后调用不使用实例变量的方法。这就是我一直以来所理解的“依赖注入”。 从CS的角度来看,我的应用程序非常简单。小型项目,需要1-2个开发人员。通常是CRUD类型的操作,并附带大量搜索。基本上是一堆RESTful Web服务,再加上Web前端,最后是一些移动客户端。我正在考虑使用直接的HTML / CSS / JS / JQuery进行前端,因此没有真正的计划使用JSP。使用Hibernate作为ORM,并使用Jersey来实现Web服务。 我已经开始编码,非常渴望在那里获得一个演示,我可以四处逛逛,看看是否有人想投资。因此,显然时间至关重要。我了解到Spring具有相当的学习曲线,而且看起来它需要一堆XML配置,而我通常会尽量避免这种麻烦。但是,如果这可以使我的生活更轻松,并且(尤其是)可以使我的生活和开发速度更快,那么我愿意痛不欲生,学习Spring。 所以,请。教我 我应该使用Spring吗?为什么或者为什么不?

4
在特殊情况下,我们可以接受重复的代码吗?
我正在一个软件项目中,我们必须构建三个API。一个用于家庭银行业务渠道,一个用于代理渠道,第三个用于移动渠道。 代理API是最完整的API,因为它具有所有功能。然后是更小的Home API,然后是移动API。 此处的架构师建立了一个公共层(所有API共享的跨通道EJB服务)。但是那时的API是不同的。 目前,这些API之间没有太大的区别。大型团队从代理商渠道开始,现在我们正在对其进行调整以适合家庭渠道。我们只是在为我们的家庭应用专门添加对象。否则,API之间的代码相似度为95%。这些API建立在Spring MVC之上,并且具有(控制器,模型和一些实用程序)。 基本上,控制器正在将BO映射到ChannelObject(在我看来,这样做不合适的地方),以及一些额外的实用程序和序列化程序。目前所有重复项。他们说重复的原因是他们希望API独立。“如果明天我们想要的家庭行为不同于代理商或移动设备,我们将不会挣扎!” 是否存在我们应该接受重复代码的情况?
57 java  api  spring 

4
为什么我们需要依赖注入的框架?[关闭]
我一直在阅读有关控制反转原理和依赖注入作为其实现的更多信息,并且我确信我理解它。 似乎基本上是在说“不要在类中声明类成员的实例化”。相反,实例化应该通过构造函数传递并分配;从外部来源“注入”到班级中。 如果就这么简单(看起来如此),为什么我们需要像spring或guice这样的带有注释的框架?我在这里缺少基本的东西吗?我真的很难理解依赖注入框架的用途。 编辑:关于可能的重复,我相信我的问题更加独特,因为它询问的是一般的DI框架,而不仅仅是Spring。Spring不仅是一个DI框架,所以有很多人想要使用Spring的原因都与DI无关。

6
Spring应当自动装配哪些类(何时使用依赖注入)?
我已经在Spring中使用Dependency Injection已有一段时间了,我了解它的工作原理以及使用它的优缺点。但是,当我创建一个新类时,我常常想知道-该类是否应该由Spring IOC Container管理? 而且我不想谈论@Autowired注释,XML配置,setter注入,构造函数注入等之间的区别。我的问题是一个普遍的问题。 假设我们有一个带有Converter的服务: @Service public class Service { @Autowired private Repository repository; @Autowired private Converter converter; public List<CarDto> getAllCars() { List<Car> cars = repository.findAll(); return converter.mapToDto(cars); } } @Component public class Converter { public CarDto mapToDto(List<Car> cars) { return new ArrayList<CarDto>(); // do the mapping here } …

3
服务层是否应该捕获所有dao异常并将其包装为服务异常?
我有三层Spring Web应用程序:dao,服务和控制器。控制器从不直接调用dao,而是通过服务层进行调用。现在,大多数情况下,如果存在未处理的dao异常(运行时),则JSP将捕获该异常,并向最终用户显示错误消息。服务层是否应该捕获所有dao异常并将其包装为服务异常? try { daoInstance.someDaoMethod(); } catch(DataAccessException dae) { throw new ServiceException("message", dae); } 假设ServiceException也是运行时,并且也未处理。仅抛出DataAccessException而不是ServiceException有什么区别吗?我只是以为表示层不应该知道数据访问异常。但是我不认为捕获不可恢复的异常只是为了包装它们。

5
验证应位于哪一层?
我正在使用Spring Boot创建一个Rest API,并且正在使用Hibernate Validation来验证请求输入。 但是我还需要其他类型的验证,例如,当需要检查更新数据时,如果公司ID不存在,我想抛出一个自定义异常。 该验证应该位于服务层还是控制器层? 服务层: public Company update(Company entity) { if (entity.getId() == null || repository.findOne(entity.getId()) == null) { throw new ResourceNotFoundException("can not update un existence data with id : " + entity.getId()); } return repository.saveAndFlush(entity); } 控制器层: public HttpEntity<CompanyResource> update(@Valid @RequestBody Company companyRequest) { Company company = …

2
Spring配置文件放在哪里?
我想将Spring框架集成到我的项目中,尤其是集成到服务器端。 因此,我不想将其放在war文件的WEB-INF文件夹中。 我是否应该将applicationContext.xml放入每个层中(意味着每个项目都被划分为不同的项目?(服务,域和DAO)) 有什么好的做法?
18 java  soa  spring 

1
DTO代替实体有什么用?
我正在研究RCP应用程序,我是这个应用程序的新手。 Spring bean用于编写业务逻辑来保存/获取实体。 但是,我们不是将实体直接发送给客户端,而是转换为DTO并填充客户端。保存时,我们再次将DTO转换为实体并保存。 这些转换有什么好处?有人可以解释吗?
18 java  spring  entity  map  dto 

5
我是否需要了解servlet和JSP才能学习Spring或Hibernate或任何其他Java Web框架?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我一直在问很多人从哪里开始学习Java Web开发,我已经知道核心Java(线程,泛型,集合,对(JDBC)有一点经验),但是我不知道JSP和Servlet。我使用服务器端使用PHP以及客户端使用HTML,CSS,Javascript和HTML5的几个基于Web的应用程序完成了我的开发工作。 我要求的大多数人都告诉我立即进入Hibernate,而有些人则告诉我不需要学习servlet和jsps,我应该立即学习Spring框架。这是真的?我不需要学习servlet和JSP来学习休眠或Spring吗? 他们所有的答案使我感到困惑,现在我完全失去了学习或学习的知识。我觉得如果我不学习JSP和servlet,就会错过很多重要的概念,这些概念将来肯定会对我有帮助。 因此,问题是,我是否需要具有基础/知识servlet和JSP才能学习spring或hibernate或任何其他Java web框架。

3
API网关(REST)+事件驱动的微服务
我有一堆微服务,这些服务根据API网关模式通过REST API公开。由于这些微服务是Spring Boot应用程序,因此我正在使用Spring AMQP来实现这些微服务之间的RPC风格的同步通信。到目前为止,一切进展顺利。但是,我对事件驱动的微服务体系结构了解得越多,对诸如Spring Cloud Stream之类的项目的了解越多,我就深信我可能会采用RPC同步方法以错误的方式进行操作(特别是因为我需要按比例缩放)以便每秒响应来自客户端应用程序的数百或数千个请求)。 我了解事件驱动架构背后的观点。我不太了解的是当坐在期望对每个请求都响应的模型(REST)后面时,如何实际使用这种模式。例如,如果我将我的API网关作为一个微服务,而另一个将存储和管理用户的微服务作为一个微服务,那么我该如何GET /users/1以纯粹的事件驱动方式对诸如a之类的事物进行建模呢?

1
Java应用程序结构:水平拆分与垂直拆分
对于大型Java应用程序的启动项目结构(使用Maven / Eclipse)有一些争论。 选项1: entities (i.e. the whole database using Hibernate classes-first) services (i.e. sets of read/write operations on the entities) app (perhaps split up more further down the line) 选项2: area1-entities area1-services area1-app area2-entities area2-services area2-app ... (where area1, area2 etc. are functional areas of the system) 选项2显然将导致产生更多的Maven项目/模块,这意味着将生成数据库的类分布在多个项目中。谁能建议每种方法的利弊?

4
什么时候不使用Spring实例化bean?
我试图了解什么是Spring的正确用法。不是语法,而是目的。如果使用Spring,那么Spring代码是否应该替换所有bean实例化代码?什么时候使用或何时不使用Spring来实例化bean? 可能以下代码示例将帮助您理解我的困境: List<ClassA> caList = new ArrayList<ClassA>(); for (String name : nameList) { ClassA ca = new ClassA(); ca.setName(name); caList.add(ca); } 如果我配置Spring,它将变为: List<ClassA> caList = new ArrayList<ClassA>(); for (String name : nameList) { ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A); ca.setName(name); caList.add(ca); } 我个人认为在这里使用Spring是不必要的开销,因为 该代码更易于阅读/理解。 这并不是真正的依赖注入的好地方,因为我不希望会有的/可变的实现ClassA,我希望以后可以自由使用Spring配置进行替换。 我认为正确吗?如果没有,那我要去哪里错了?
14 java  spring 

3
多个Oauth2访问令牌
我有一个使用oAuth2的API和我自己的使用此API作为后端的移动应用。由于用户可以同时通过多个设备(例如iPhone,iPad,Android平板电脑或Android手机)登录,因此我需要API来区分每个连接。我想通过单独的访问令牌来执行此操作:每个客户端都获得一个单独的访问令牌。 问题是我们使用的当前实现(spring-security-oauth2)基于client_id,用户名和范围生成唯一的密钥。因此,基本上,当获得访问令牌时,所有客户端都会为同一用户获得相同的访问令牌。这是使用DefaultAuthenticationKeyGenerator完成的。 忽略身份验证密钥生成器并仅在来自客户端的每个请求上简单地创建一个新的访问令牌是否安全?
13 spring  oauth2 

2
微服务架构共享域模型
假设我们有一个使用微服务架构的Spring Boot应用程序。每个服务都有其自己的域模型,但是每个服务必须引用一个User域对象。解决该问题的最佳方法是什么?为每个服务仅拥有一个userId会更好,然后在需要时向用户服务询问用户详细信息,或者为所有微服务都拥有一个共享域库会更好吗?

3
如何在单个事务中管理2种DAO方法?
在一次采访中有人问我:我们如何在一次交易中管理两种交易/道方法。所需功能: 如果其中任何一个失败,我们都需要回滚这两种方法。 可以将这两种方法与单个事务分开附加调用。 管理应该在DAO层上,而不是在服务层上。 我认为:这个问题与春季交易管理有关。

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.