- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道并理解基于构造函数的注入(inject)。但是, Autowiring 模式让我感到困惑。1) 我读到 Autowiring 的默认模式是“无 Autowiring ”,即我们必须在 xml 文件中手动设置属性。但是,基于 xml 的配置不是一种 Autowiring 吗?它怎么能被认为是“无 Autowiring ”?2) 其他 Autowiring 模式是 i) byName ii) byType iii) constructor iv) auto-detect。我的假设是否正确:
a) 当使用基于 xml 配置的 Autowiring 时,默认模式是“byName”(即我必须保持属性引用的名称与用作属性的 bean 的名称相同。)
b) 当使用注解时,默认模式是'byType'(无论@Autowired关键字放在什么地方,即在setter上,在构造函数上或在属性上,它都会搜索被自动写入的属性的类型)
3) 基于构造函数的注入(inject)和 Autowiring 的“构造函数”模式有什么区别?(我读到构造函数模式意味着它对所有构造函数参数应用 byType 模式,但它与将 @Autowired 关键字放在构造函数)
4) 我知道要在注释中启用 Autowiring 模式 byName,在 xml 文件的 bean 定义中,我必须使用“autowire = 'byName' ”。但是,假设我只使用注释配置(使用@Component,并且在 xml 中没有 bean 定义),并且我想使用 byName Autowiring 模式,那么这样做的方式是什么?
最佳答案
我觉得你有点糊涂了。首先,您需要了解依赖注入(inject)(参见 here)。有大量关于 DI 的信息,但简而言之,这意味着某些第三方(例如 spring IOC)将依赖项传递给对象而不是对象自己创建/获取引用。这可能通过构造函数或 setter 发生。例如,考虑构造函数 DI
class B{
}
class A{
private B b;
public A(B b){
this.b = b;
}
}
某些第三方会将 B 类的实例注入(inject) A 而不是 A 类创建对 B 本身的引用。很多时候,您会使用一个接口(interface),因此类 A 甚至不知道将向其中注入(inject)什么对象。
现在在 Spring 中有不同的方法来配置对象之间的这些关联(上面的示例)。您可以使用 XML、Java Config 或 Autowiring 。他们是独立的,但做同样的事情。
在 XML 和 JAVA 配置中,您需要显式配置依赖项 - 在 xml 文件中或为 JAVA 配置使用 @Configuration 类并使用 @Bean 注释 bean。 Autowiring 是不同的。在那里您可以创建简单的 POJO,您可以使用 @Component、@Controller、@Service 或 @Repository 对其进行注释。它们将通过组件扫描自动注册为 beans。使用 Autowiring ,您不需要在 XML 文件或 JAVA Config 类中显式配置依赖项。您可以直接在代码中完成。例如,如果我们必须使用前面的示例比较 java 配置与 Autowiring
Java Config (explicit config in a config class)
@Bean
public A getA(){
return new A(new B());
}
Autowiring (implicit - done in code)
@Component
class B{
}
@Component
class A{
private B b;
@Autowired
public A(B b){
this.b = b;
}
}
在后者中,我们将类 B Autowiring 到类 A(由于 @Component 注释,它们都将注册为 bean),而无需在 xml 文件或 java 配置类中显式定义此关联。我希望这是有道理的。
关于spring - Spring中 "constructor based injection"和 "autowire by constructor mode"有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39235095/
这更像是一个最佳实践类型的问题。 我听过很多次: a) 在 Spring 中 Autowiring 时,最佳做法是 Autowiring 接口(interface)“而不是”实现。 和.. b) 我还
我正在查看工作区中的一些旧示例。我看不出怎么样由于没有 @Autowired, Autowiring 完成。 Spring boot + facebook 默认配置。 @Controller @Req
事实似乎并非如此。我曾经认为 XML 配置是为了覆盖注释。但是当我在XML配置中设置autowire =“no”时,bean的@Autowired注释属性仍然有效。我不再确定 XML autowire
为什么需要 Autowiring ? Autowiring 概念的解释是什么?@autowired Spring Framework 中的注释. 最佳答案 不需要 Autowiring ,只是方便。
来自this Spring documentation我知道当我使用@Bean时,默认值已经相当于: @Bean(autowire = Autowire.NO) (Default) No autowi
遇到了一个奇怪的要求。我需要将唯一的错误 ID 附加到 log4j 消息并将该消息 ID 返回给接口(interface)。所以,我虽然让我们创建一个 spring 服务,就像这样 public cl
这个问题已经有答案了: @Autowire failing with @Repository (3 个回答) 已关闭 4 年前。 我有一个类“ReportEverythingForm”,它拒绝通过自动
我是 Spring 的新手。我正面临 Spring-Boot 的问题。我正在尝试将一个字段从外部配置文件 Autowiring 到一个 Autowiring 的 bean 中。我有以下类(class)
我有一个带有存储库的 Spring Boot 应用程序。 我还使用@Service并扩展其中的存储库。 当我尝试 @Autowired 我拥有的服务时: Caused by: org.springfr
我有一个接口(interface)C,想要访问另外两个类中的getClassName()。访问 a.getClassName() 时,method1() 中出现异常。 public interface
我遇到了一个奇怪的问题,其中注入(inject)了 @Autowire 的 Component 在一个类中可用,但在另一个类中不可用。 我在Account和Agreement类的属性network中使
考虑以下示例代码: public class SmallCar { private CarEngine carEngine; @Autowired public SmallCa
autowire = "no"和 autowire = "default"有什么区别?如果它们相同,那么为什么我们有这 2 个选项。 最佳答案 Beans The default is "defaul
我已将项目更改为使用注释而不是 xml 文件,但这会增加应用程序部署时间。现在我正在寻找减少它的方法。 按类型 Autowiring 和按名称 Autowiring 之间有性能差异吗? 热烈欢迎任何其
我有一个与 Web 插件一起使用的 spring boot 应用程序。 在一节课中我有: package com.test.company @Component @RestController pub
我有一个可以执行某些操作的系统。该系统使用以下方法为每个对象创建一个单独的线程: stp.scheduleWithFixedDelay((EditSite) ctx.getBean("EditSite
我正在尝试自动连接存储库,但它无法工作。我已经为此苦苦挣扎了一个星期,但我似乎无法弄清楚。有趣的是,当我注释掉人员存储库的 Autowiring 时,程序可以正常工作并正确编译,但是一旦我尝试 Aut
意味着如果具有所需类型的 bean 不超过 1 个,bean 的所有字段将自动注入(inject)依赖项。 问题是当使用注解时它是如何工作的,它到底能不能工作。 我的测试表明即使我使用 @Resou
我有一个 Autowiring 其他 bean 的组件: @Component public class MyComponent { @Autowired private Enviro
这是我的类代码,其中有 @Autowired 字段: 测试A @ContextConfiguration("classpath:spring.xml") public abstract class T
我是一名优秀的程序员,十分优秀!