AutoWired getProperty返回null

时间:2019-03-05 06:05:49

标签: spring

我有2个类,其中将自动装配类的getProperty设置为null

我将发布我的课程并在下面解释问题 我已经使用了自动装配,但是我得到的输出为空

Connection.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;
            } 

    }

}

在Spring 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()设置为空

有人可以帮我吗

感谢advnace !!!!!!!!

1 个答案:

答案 0 :(得分:0)

发件人:

Connection connection = (Connection)context.getBean("conn");

在主要方法中删除Connection上的@Autowired并更改为:

@Autowired
BeanFactory beanFactory;

Connection connection = beanFactory.getBean(Connection.class, "args");

@Scope(value = "prototype")意味着Spring不会在启动时立即实例化bean,而是在以后按需进行实例化。

更新

这是beanFactory.getBean()的Javadoc

  

getBean(java.lang.Class<T> requiredType, java.lang.Object... args)          抛出BeansException   返回一个实例,该实例可以是指定bean的共享或独立的。

     

允许指定显式构造函数参数/工厂方法   参数,覆盖指定的默认参数(如果有)   Bean定义。

     

此方法进入ListableBeanFactory按类型查找范围,但是   也可以根据   给定类型的名称。对于更广泛的检索操作   套豆,请使用ListableBeanFactory和/或BeanFactoryUtils。

     

参数

     

requiredType -豆必须匹配的类型;可以是接口或超类

     

args -使用显式参数创建bean实例时要使用的参数


  

返回:bean的一个实例

     

投掷

     

NoSuchBeanDefinitionException -如果没有此类bean定义

     

BeanDefinitionStoreException -如果已给出参数,但受影响的bean不是原型

     

BeansException -如果无法创建bean


此外,请在此处阅读:BeanFactory