- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设你有一个如下的原型(prototype) bean 类:
@Component
@Scope("prototype")
public class Foobar {
private String foo;
public Foobar( String foo ) {
this.foo = foo;
}
}
那么,是否可以使用 @Autowired
将这样的 bean 连接到另一个类中,该类应该使用非默认构造函数 Foobar(String foo)
来实例化 bean ?
更新
在上面的示例中,构造函数参数 String foo
在应用程序上下文中不可用,而是动态的。因此,使用 @Autowired
注释构造函数,然后在上下文中的某处指定 foo
似乎不是一个理想的解决方案。
最佳答案
这里有 3 种方法,只需看看最适合您情况的方法:
更好的时候:您拥有在上下文中构建原型(prototype) bean 所需的一切(即使对于属性,例如 @Value("${prop}")
)
如果您想要一种自动的方式来执行此操作,您还需要拥有在上下文中实例化 bean 所需的一切(即使对于原型(prototype) bean)。如果您在上下文中拥有所需的一切,您可以简单地将构造函数注释为 @Autowired
,Spring 将为您完成其余的工作。
@Component
@Scope("prototype")
public class FooBar {
private Baz baz;
@Autowired
public FooBar(Baz baz) {
this.baz = baz;
}
}
FactoryBeans
更好的时候:如果您使用基于 XML 的上下文,您会更喜欢这种方式。
如果您需要一种个性化的方式来做这件事,另一种可能性是使用 FactoryBean
s。来自 documentation :
Interface to be implemented by objects used within a BeanFactory which are themselves factories. If a bean implements this interface, it is used as a factory for an object to expose, not directly as a bean instance that will be exposed itself.
FactoryBean
被 Spring 用于构建您请求的对象(无论是原型(prototype)还是单例)。
对于你的情况,你可以有这样的实现:
@Component
public class FooBarFactory implements FactoryBean<FooBar> {
@Autowired
private Baz myContextProvidedObject;
@Override
public FooBar getObject() throws Exception {
return new FooBar(myContextProvidedObject, "my parameter");
}
@Override
public Class<?> getObjectType() {
return FooBar.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
您可以在上下文的其他实例上简单地 @Autowired
FooBar
。
@Configuration
更好的时候:如果您已经使用注释配置了上下文,那么您肯定会更喜欢这种方式。
第三种方法是使用你的 @Configuration
类,这是我最喜欢的。来自 documentation :
public @interface Configuration
: Indicates that a class declares one or more @Bean methods and may be processed by the Spring container to generate bean definitions and service requests for those beans at runtime, for example:
在该类中,您可以使用如下方法:
@Configuration
public class MyConfig {
@Bean
@Scope("prototype")
public FooBar fooBar(Baz myContextProvidedObject) {
return new FooBar(myContextProvidedObject, "my parameter");
}
}
关于java - spring:使用@Autowired和context:component-scan自动连接原型(prototype)bean时如何使用非默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232034/
我正在使用扫描仪检测设备。目前,我的条形码的值为 2345345 A1。因此,当我扫描到记事本或文本编辑器时,输出将类似于 2345345 A1,这是正确的条形码值。 问题是: 当我第一次将条形码扫描
我正在尝试在 Jenkins 的构建后部分运行 Checkmarx Scan。 在我的 Jenkins 工作步骤是--> 1st) 从 SVN Connection 获取源代码到 Checkmarx
我有以下表架构 - CREATE TABLE [dbo].[TEST_TABLE] ( [TEST_TABLE_ID] [int] IDENTITY(1,1) NOT NULL, [N
我有一个关于 postgres 表上的选择的有趣案例: advert (~2.5 million records) id serial, user_id integer (foreig
据我所知,context:component-scan 需要指定 base-package 属性。我如何配置它以扫描类路径中的所有类? 最佳答案 你不知道。那将是一场噩梦。 例如,这意味着加载所有库的
我正在测试不同的查询,我很好奇数据库如何决定使用位图堆扫描和索引扫描。 create index customers_email_idx on customers(email varchar_patt
我在使用中 Swing 不定 import java.util.Scanner; . . . Scanner scan = new Scanner(System.in); . . . Integer.
我有下表 create table log ( id bigint default nextval('log_id_seq'::regclass) not null const
所以我有一个文件要读入,我知道数据将如何列出。例如,我知道每个新行的第一个标记将是 double 。 我一直在使用 Scanner 并且只是使用 scan.nextDouble() 来读取 doubl
在这种情况下,该表有很多文本列,我需要对每一列执行(相似)搜索。我继续为这些列中的每一列创建一个 gin 索引(扩展 pg_trgm 中的 gin_trgm_ops)以加快搜索速度,实际上 yie
我有两个针对 Go 中特定表的查询 - 一个用于检索单个项目,另一个用于返回列表。第一个使用 sql.DB.QueryRow 因为它只需要检索一行,第二个使用 sql.DB.Query 返回几个不同的
添加 StructureMap-MVC3 时打包到 ASP.NET MVC 应用程序, 一个 IoC包含 Initialize 的类添加了包含以下内容的方法(由 App_Start 文件夹中的某些代码
我有以下索引: CREATE INDEX index_c_profiles_on_city_state_name_domain ON c_profiles ((data->>'state'), (da
我在 Postgres 10 中有一个包含 1700 万行和 102 列的表 union_events。我运行命令: CREATE INDEX union_events_index ON temp_s
我以为我知道 Ruby 中的 scan:就好像它在做一个单一的匹配,但对所有结果重复它并放入数组? ruby-1.9.2-p0 > "hello world".scan(/\w{2}/) => ["
我收到此错误并尝试了互联网和 stackoverlow 中可用的所有方法来解决此问题。我试图在使用 sqlx 包连接 MySQL 数据库并扫描结果后运行查询。我已经尝试过针对类似问题共享的解决方案,但
我是 spring 和 Maven 的新手。最近我构建了 spring MVC 项目并使用 maven 来管理项目结构和依赖项。 当我编写单元测试时,我遇到了一个问题,即我无法从“src/main/j
我现在正在尝试 restful api,其中列 SequenceID 不是自动增量,因为故意的,当我像这样计数时,我的问题是库 gorm countSequenceId := db.Debug().T
Scans 当客户端针对表发出扫描时,HBase会为每个区域生成一个RegionScanner对象来提供扫描请求。 该RegionScanner对象包含一个StoreScanner对象列表
我正在构建一个基于浏览器的文档扫描应用程序。我看过多家供应商提供的产品,如 dynamosoft、asprise、atalasoft 等。我对基于浏览器的文档扫描的基本问题是,这些产品中的任何一个都可
我是一名优秀的程序员,十分优秀!