当前位置: 首页 > 知识库问答 >
问题:

针对setter方法与非setter方法的Spring@Autowired

蓬弘
2023-03-14

根据@autowiredjavadoc:

将构造函数、字段、setter方法或配置方法标记为由Spring的依赖项注入工具自动生成。任何给定bean类中只有一个构造函数(最大值)可以携带此注释,指示构造函数在用作Spring bean时自动连接。这样的构造函数不必是公共的。字段是在bean构造之后、调用任何配置方法之前注入的。这样的配置字段不必是公共的。配置方法可以有任意名称和任意数量的参数;每个参数都将在Spring容器中使用匹配的bean自动生成。

Bean属性设置器方法实际上只是这种通用配置方法的一个特例。这样的配置方法不必是公开的。在多个参数方法的情况下,“必需”参数适用于所有参数。如果是集合或映射依赖类型,容器将自动装配与声明值类型匹配的所有bean。如果是Map,则必须将键声明为String类型,并将其解析为相应的bean名称。请注意,实际的注入是通过BeanPost处理器执行的,这反过来意味着您不能使用@autoweld将引用注入到BeanPost处理器或BeanFactoryPostProc处理器类型中。请查阅javadoc以获取AutowiredAnnotationBeanPostProcitor类(默认情况下,该类检查是否存在此注释)。

我的问题是:

>

还有,假设我有一个setter方法和一些任意方法,分别使用@Autowired@Autowired。我假设setter方法在bean实例化后由spring自动调用,而随机命名的@Autowired方法不会被调用,对吗?

另外,spring如何理解实例化(setters)后应该调用哪个@Autowired方法,而其他方法不应该?这与javadoc中的一条语句有何关联,即:

Bean属性设置方法实际上只是这种通用配置方法的一个特例

最后一个问题:我在哪里可以读到它?因为spring文档没有关于这方面的任何信息,而且我无法在其javadoc中找到spring使用的确切逻辑。

共有3个答案

闻人越
2023-03-14

在此上下文中,Config方法是指您将在init method@PostConstruct下指定的方法

如您所知,Setter类似于setXXX

所以很明显,找到哪个是哪个并不困难。同时请注意,spring不能基于参数名自动连线。

冉锋
2023-03-14

config方法是一种类似工厂的方法,在这种情况下,它会自动连接参数:

@Autowired
public SomeObject initSomeObject(Object1 o1, Object2 o2, ...) {

@Autowired仅确保Spring将(尝试)提供所需的参数。

壤驷志学
2023-03-14

@Autowired注释可与构造函数、setter方法或任何其他方法一起使用。每当Spring找到@Autowired注释时,它都会尝试找到与方法参数匹配的bean,并调用该方法。如果多个方法(setter或non-setter)具有@Autowired注释,那么在bean实例化之后,所有方法都将由Spring调用。

 类似资料:
  • 我刚刚看到一些示例,其中@Autowire用于非setter方法。 我怎么称呼这个方法?像对象eference.do东西();调用这些方法时不需要参数吗? 我们什么时候在非setter方法上使用@autowire 有人能分享一些相同的样品吗?

  • 我想截取在一个类的所有实例上调用的每个setter方法,然后在另一个类对象上调用一个方法,参数对应于第一个类的每个实例的一些字段值。为此,我想使用ByteBuddy API,但我也想为指定类的所有实例只创建一个子类 例如,我编写了以下代码: 我将为每个资源类型创建的每个子类保存在映射中,以便为每个资源类型只创建一个子类。这里的问题是,对于创建的子类的所有实例,传递给在目标对象上调用的方法“upda

  • 我不明白我做错了什么。我想使用JAXB解封一个xml,但是我注意到没有调用setter方法。我使用Java1.5。Attribute.java类中的Getters和Setters正常工作,但在Configuration.javaclass-Setter方法不调用。你能告诉我我错在哪里吗? 我的XML如下所示:

  • 假设我有一个类Things,它包含许多不同的实例变量。我为它们分别创建了单独的setter和getter方法。如果我想创建另一个存储things'class'的class2,那么为things类中的实例变量创建额外的setter和getter方法是很好的编码方法。另外,假设我有另一个使用class2的class3,那么重复setter和getter方法会产生高耦合吗?

  • 我在我的项目中使用lombok,并在POJO类上使用和注释生成和。我试图重写属性的setters方法,但它不起作用 我想检查JSON属性是空的还是空的,我想在Setter方法中设置默认值 工作场景: 失败的场景: 输出: 我也将此作为参考,但到目前为止运气不佳

  • 问题内容: 我使用的龙目岛在我的项目和产生和使用,并注解POJO类的顶部。我正在尝试覆盖属性的setter方法,但是它不起作用 我想检查JSON属性是否为空或空,我想在Setter方法中设置默认值 工作方案: 失败的情况: 输出: 问题答案: 您只是遇到了一个我从未见过的错误,或者您正在测试错误。 像这样的注释 在现场一级确实阻止了设置器的生成。但是考虑到要定义一个setter,您甚至不需要它。显