Java值在bean的构造函数中注入

时间:2019-08-30 14:44:58

标签: java spring

我有一些不错的工作代码,例如:

// SpringConfiguration.class文件

package com.yet.spring.core;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
public class SpringConfiguration {

    @Bean
    @Scope("prototype")
    public Client client(String id, String full_name) {

        return new Client(id, full_name);

    } //END: Client()

} //END: class SpringConfiguration

现在,我可以通过以下方式请求具有构造函数值的bean“客户端”:

 public final static ApplicationContext app_context =
            new AnnotationConfigApplicationContext(SpringConfiguration.class);

new_client = (Client) app_context.getBean(Client.class, "1", "John Smith");

如何通过XML配置文件执行此操作?只能将“ constructor-arg”用于静态值或Bean吗?

1 个答案:

答案 0 :(得分:0)

如果您确实需要使用XML,那么它还支持构造函数注入,并且适用于基本类型,表达式和bean。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <constructor-arg index="0" ref="dataSource"/> <!-- bean with id dataSource is defined in the same XML earlier -->
</bean>

如果您需要始终获取具有相同值的Client bean,则可以执行以下操作

@Bean
@Scope("prototype")
public Client client(@Value("${clientId}") String id, @Value("${clientFullName}") String full_name) {

    return new Client(id, full_name);
} 

然后定义属性clientIdclientFullName是一个属性文件。 如果您每次都需要使用差异参数创建Client对象,那么您根本不需要Spring。你应该做

new_client = new Client("1", "John Smith");