想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。
我正在学习Spring并构建一些实验应用程序。我不知道在哪里使用@Autowired来创建对象。
我得到了它促进松散耦合的部分,并且每次都创建一个新的对象,而不是“new”关键字所做的。
但是,对于我们需要在应用程序中使用的第三方对象,我们应该做些什么呢。例如,我正在使用一个rest API,为此我需要初始化三个类,如下所示
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
这段代码正在为RestTemboard、HttpHeaders和HttpEntity创建新对象。使用此代码,每次我调用rest API时,它都会创建三个新对象。这是正确的方法吗,还是我应该将它们标记为@自动加载。请详细说明。
由于restTemboard是您要重用的唯一类,可能,将它放在具有范围Singleton(默认范围,所以只是一个普通bean)的bean中是明智的。每次调用使用此客户端的方法时,都可以创建另外两个类。请注意,您也可以将Entity和Header作为参数传递......所以我不明白为什么要使用Spring。
class MyClass {
@Autowired
private RestTemplate restTemplate;
public void callTheRestClient() {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
}
}
您需要使用“范围”。默认情况下,当您使用@autowiredspringbean时,范围是singleton。这意味着spring在使用@Autowired的地方注入相同的单例对象。通过制作scope原型,您指示Spring为每个@Autowired注入创建新对象。
请参考sping-autoweed-instantiate-new-bean
Autowire的典型用途是在初始化bean时自动用单例依赖项填充属性。不管是您的代码还是第三方类。您需要考虑它是否是程序逻辑的一部分,或者它是否真的是一个应该初始化一次并重用的依赖项。
如果您的RestTemboard
需要在每次交换
之前进行相同的初始化,那么您可以考虑使用@Autowire
并在Spring的配置中初始化bean。例如,从这个意义上说,它类似于DataSource
。但如果您将其视为用作程序逻辑一部分的实用程序类(如连接或文件),则不要将其视为@Autowire
。它会使您的程序更加复杂而没有显着的收益。
我知道字符串文字和新字符串对象之间的区别,也知道它在内部是如何工作的。但我的问题是,这有点超前。当我们使用new关键字as创建字符串对象时 在本例中,我们传递的是字符串类型的参数。我的问题是这个字符串是在哪里生成的-堆还是字符串常量池还是其他地方? 据我所知,这个参数是一个字符串文字,所以它应该在字符串常量池中。如果是这样的话,那么intern方法的用途是什么?只需将变量str链接到常量池?因为“
问题内容: 在Java中,我知道关键字可以提供变量的可见性。问题是,如果变量是对可变对象的引用,是否还为该对象内部的成员提供可见性? 在下面的示例中,如果多个线程正在访问和更改线程,它是否可以正常工作? 例 问题答案: 这是关于volatile的一些细节的旁注说明。在这里写这个是因为评论太多了。我想举一些例子说明挥发性如何影响可见性,以及在jdk 1.5中如何改变。 给出以下示例代码: 此测试代码
问题内容: 我有需要转换为Java对象的JSON。我需要处理的JSON如下所示: 在搜索引擎(在本例中为“ Jobs”)中输入搜索关键字时,将返回此JSON。我还没有命名这些要创建的变量,这个JSON只是从类似的早期应用程序中“送给”我的。因此,我显然在保存变量和抽象变量方面遇到麻烦。抽象是一个保留关键字,在我读过的任何地方,保留关键字都不能用作变量名。 我无法访问正在更新的以前的应用程序,我想指
有可能使用@Configurable类那 我知道用@Autowired和@Resource等是可能的...还有其他的吗? 如。 然后像这样 除了能够使用<code>new</code>操作符创建<code>MyObj</code>并仍然让spring处理注释之外,还有其他选择吗? ——编辑: 在使用@Autowired时,可以使用来做到这一点,看看一些带有Spring和AOP的Hibernate和
我正在尝试使用new关键字创建一个组件的新实例。组件类有另一个类的自动布线。在第一类中,它有一个调用第二类的方法。代码如下: First.java 第二Java语言 一个pplication.java 我能够使用依赖注入来训练解决方案。我只是想这样做。 提亚
这个问题似乎与帮助中心定义的范围内的编程无关。 我只是想使它的对象,并在控制台屏幕调用方法,但它是显示静态引用的错误。 请帮助我创建一个没有此静态引用错误的对象。