title: What is order of evaluation for @Autowiring in SpringBoot project
body: <p>I'm trying to write a simple SprintBoot REST Controller to run on Websphere Liberty, and having a problem with @Autowire.   Here are the relevant (I think) pieces of code:</p>
  
  <pre><code>@CrossOrigin
  @RestController
  @RequestMapping(path = "userSetting")
  public class RESTInterface {
  
      @Autowired
      private UserSettingDAO userSettingDAO;
  
      @RequestMapping(path = "/getUserSetting", method = { RequestMethod.GET }, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
      public String getUserSetting(
              @RequestParam(value="user_id", required=true ) String user_id, 
              @RequestParam(value="app_id", required=true )  String app_id,
              @RequestParam(value="dashboard_name", required=true ) String dashboard_name 
              ) {
          if ( userSettingDAO == null ) {
              System.out.println( "userSettingDAO is null" );
      ...
  
  ////////////////////////////////////////////////////////////////////////////////
  
  @Component
   public class UserSettingDAO {
  
      @Autowired
      private JdbcTemplate jdbcTemplate;
  
      @Autowired
      private DataSource dataSource;
  
       public UserSettingDAO() {
          System.out.println( "dataSource is " + dataSource );
          System.out.println( "jdbcTemplate is " + jdbcTemplate );
  </code></pre>
  
  <p>When I deploy the application to Liberty, it appears to start up OK.
  When I hit the appropriate endpoint, I see the following in <code>console.log</code>:</p>
  
  <pre><code>UserSettingDAO.jdbcTemplate = null
  dataSource is null
  jdbcTemplate is null
  2018-04-24 16:54:19.887  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/userSetting/getUserSetting],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public java.lang.String com.ui.usersetting.restinterface.RESTInterface.getUserSetting(java.lang.String,java.lang.String,java.lang.String)
  2018-04-24 16:54:19.890  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/userSetting/upsertUserSetting],methods=[POST],produces=[application/json;charset=UTF-8]}" onto public void com.ui.usersetting.restinterface.RESTInterface.upsertUserSetting(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
  2018-04-24 16:54:19.891  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/userSetting/deleteUserSetting],methods=[DELETE],produces=[application/json;charset=UTF-8]}" onto public void com.ui.usersetting.restinterface.RESTInterface.deleteUserSetting(java.lang.String,java.lang.String,java.lang.String)
  2018-04-24 16:54:19.893  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/userSetting/hello],methods=[GET],produces=[application/json;charset=UTF-8]}" onto public java.lang.String com.ui.usersetting.restinterface.RESTInterface.hello()
  2018-04-24 16:54:19.924  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
  2018-04-24 16:54:19.925  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity&lt;java.util.Map&lt;java.lang.String, java.lang.Object&gt;&gt; org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
  2018-04-24 16:54:20.166  INFO 8807 --- [cutor-thread-11] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6a5997f7: startup date [Tue Apr 24 16:54:15 EDT 2018]; root of context hierarchy
  2018-04-24 16:54:21.386  INFO 8807 --- [cutor-thread-11] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
  2018-04-24 16:54:21.389  INFO 8807 --- [cutor-thread-11] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'dataSource' has been autodetected for JMX exposure
  2018-04-24 16:54:21.396  INFO 8807 --- [cutor-thread-11] o.s.j.e.a.AnnotationMBeanExporter        : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
  </code></pre>
  
  <p>My question is:  Why are the two <code>println</code> statements saying that their respective variables are null?  Does it have something to do with the fact that the UserSettingDAO constructor appears in the log to be executed <em>before</em> the lines about <code>dataSource</code> appear in the log?</p>
  
  <p>What <em>should</em> I do to get those variables properly initialized?</p>