@Bean
在Spring 3.0中有一个注释。它允许直接在Java代码中定义Spring
bean。在浏览Spring参考时,我发现了使用此批注的两种不同方法-带注释的内部类@Configuration
和没有此注释的内部类。
本节包含以下代码:
@Component
public class FactoryMethodComponent {
@Bean @Qualifier("public")
public TestBean publicInstance() {
return new TestBean("publicInstance");
}
// omitted irrelevant method
}
在这里我们可以看到一段非常相似的代码,但是现在@Configuration
就在这里:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
参考的前一部分包含以下说明:
Spring组件中的@Bean方法的处理方式与Spring @Configuration类中的@Bean方法不同。
区别在于,使用CGLIB不能增强@Component类,以拦截方法和字段的调用。CGLIB代理是调用@Configuration类@Bean方法中的方法或字段来创建Bean元数据引用以协作对象的方法。方法不是使用常规Java语义调用的。相反,在@Component类中的方法或字段@Bean方法具有标准的Java语义。
但是CGLIB是一种内部的东西,应用程序开发人员不应该知道(当然,在理想的世界中)。据我了解,在这两种情况下,Spring都会调用带有注解的方法@Bean
来创建Spring
bean,在这两种情况下,这些实例都会注入到协作者中。
所以我的问题是 ,在这两种情况下,对于我作为应用程序开发人员 有 什么区别 ?
区别在于,@Configuration
您可以@Bean
从另一个方法调用一个方法并获取完全初始化的实例,如下所示:
public class Foo {
@Value("Hello, world!")
public String value;
}
@Configuration
public class Config {
@Bean
public Foo createFoo() {
Foo foo = new Foo();
System.out.println(foo.value); // Prints null - foo not initialized yet
return foo;
}
@Bean
public Bar createBar() {
Foo foo = createFoo();
System.out.println(foo.value); // Prints Hello, world! - foo have been initialized by the interceptor
return new Bar(foo);
}
}
在使用MapStruct、Lombock和Spring时,我在Tomcat 9中的应用程序部署中遇到以下错误: 我的spring配置类在包层次结构的根目录中设置包扫描。映射器的实现也是在target/generated-sources下生成的: 我的错误表明Spring找不到实现类,我遗漏了什么?我试图将generated-sources文件夹添加到构建路径并将其包含在包扫描中,但没有成功。
从https://projects.spring.io/spring-framework/,我有一个spring framework hellpworld程序。我删除了注释。然而,程序仍然可以像以前一样运行。为什么?这里的角色是什么?
我只是在尝试内部类,遇到了这个想法,即拥有本地但静态的内部类…好吧,我在静态方法中制作了一个内部类…就这么简单…这是我做的例子 这不会给出任何编译错误。 我知道如何访问静态方法m。但是我想知道是否有办法从外部类访问本地类 LocalStatic.好吧,根据我的理解,我们无法访问方法内部的东西,对吧?因此,我无法从类外部访问LocalStatic或该本地类内的任何方法或属性,只想确保..
当试图用包含所有上下文配置的抽象类运行stepdefs时,spring看到2个不同的beans parent和step def 我使用的是Spring Booking版本:2.6.4,JUnit 5和Cucumber版本7.2.3 异常堆栈跟踪: io.cucumber.core.runtime.CucumberExecutionContext.runTestCase:没有可用的“Cucumber
我在调用get请求(modes-calcul)时遇到这个错误,我不明白为什么...我的依赖注入是正确的吗? ModeCalculController: 谢谢你的帮助..
我尝试自动连接我的mapstruct mapper: 这是可行的: 但是为什么我不能使用: 我得到以下错误: 导致原因:org . spring framework . beans . factory . nosuchbeandidefinitionexception:没有类型为“pl . comp . window . application . mapper . windowdtomapper