У меня есть 2 класса, в которых я получаю getProperty класса autowired как null
Я опубликую свои классы и объясню проблему ниже Я использовал автопроводку, но я получаю вывод как null
Соединение.java
@Component
public class Connection {
private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Connection.class);
Logger basiclogger = Logger.getLogger("Main");
public CloseableHttpClient httpClient;
public static String Server;
public static String service;
public static String User;
public static String Password;
@Autowired
public Connection(@Value("${Server}") String Server, @Value("${service}") String service,
@Value("${User}") String User,@Value("${Password}") String Password)
{
Connection.Server = Server;
Connection.service = service;
Connection.User = User;
Connection.Password = Password;
}
public Connection(){
}
public CloseableHttpClient getHttpClient() {
return httpClient;
}
public void setHttpClient(CloseableHttpClient httpClient) {
this.httpClient = httpClient;
}
public CloseableHttpClient makeConnection() {
AuthenticatedClientBuilder builder = AuthenticatedClientBuilder.create(serviceProvider)
.addServer(Server).setUser(User)
.setPassword(Password);
httpClient = builder.build();
basiclogger.info("Connection is Established SuccessFully");
return httpClient;
}
}
}
Весенний XML
<bean id = "conn" class = "com.java.Connection"
scope = "prototype"/>
В главном
@Autowired(required = true)
Connection connection;
new ClassPathXmlApplicationContext(new String[] {"Spring-batch-context.xml"});
Connection connection = (Connection)context.getBean("conn");
connection.getHttpClient();
System.out.println("***********"+connection.getHttpClient()+"***********");
Но я получаю connection.getHttpClient() как null
Может кто-нибудь, пожалуйста, помогите мне
Заранее спасибо!!!!!!!!
<bean id = "conn" class = "com.java.Connection" scope = "prototype"> <property name = "CloseableHttpClient"/> </bean> Нравится??
Возможный дубликат Как - Spring IoC и HttpClient 4.3.1 CloseableHttpClient?
я получаю httpclient по умолчанию, но я хочу использовать makeconnection() в Connection.java
От :
Connection connection = (Connection)context.getBean("conn");
Удалите @Autowired в Connection в основном методе и измените на:
@Autowired
BeanFactory beanFactory;
Connection connection = beanFactory.getBean(Connection.class, "args");
@Scope(value = "prototype") означает, что Spring не будет создавать экземпляр bean-компонента сразу при запуске, а сделает это позже по запросу.
Обновлять:
Вот Javadoc beanFactory.getBean()
getBean(java.lang.Class<T> requiredType, java.lang.Object... args)throws BeansException Return an instance, which may be shared or independent, of the specified bean.Allows for specifying explicit constructor arguments / factory method arguments, overriding the specified default arguments (if any) in the bean definition.
This method goes into ListableBeanFactory by-type lookup territory but may also be translated into a conventional by-name lookup based on the name of the given type. For more extensive retrieval operations across sets of beans, use ListableBeanFactory and/or BeanFactoryUtils.
Parameters:
requiredType - type the bean must match; can be an interface or superclass
args - arguments to use when creating a bean instance using explicit arguments
Returns: an instance of the bean
Throws:
NoSuchBeanDefinitionException - if there is no such bean definition
BeanDefinitionStoreException - if arguments have been given but the affected bean isn't a prototype
BeansException - if the bean could not be created
Далее читаем здесь: БинФабрика
Все еще получаю ноль
какая у вас весенняя версия?
4.2.4 Весенняя версия
Извините, я пропустил это, вы использовали @Scope(value = "prototype"), что означает, что Spring не будет создавать экземпляр bean-компонента сразу при запуске, а сделает это позже по требованию.
я должен использовать @Scope или не должен?
Это зависит от вашего требования. область применения: прототип означает, что одно определение компонента имеет любое количество экземпляров объекта. Поскольку вы передаете значения из файла свойств, и кажется, что они не изменятся в жизненном цикле программы, поэтому вы можете удалить его или использовать область применения: синглтон, что означает определение компонента для одного экземпляра для каждого контейнера Spring IoC (по умолчанию).
ты масштаб поменял?
Что такое исходная система в вашем ответе @vancleff
Если этот вызов определен в xml «CloseableHttpClient», он не инициализируется и не подключается автоматически с использованием xml, поэтому вы получаете нуль. Передайте свойство объекта CloseableHttpClient компоненту Connection в xml. См. это