2016-08-17 5 views
0

У меня есть небольшое приложение Java, которое подключается к базе данных MySQL. Для подключения к базе данных ТОЛЬКО, я хотел бы использовать Spring для управления пулом подключений JNDI.Как использовать @Autowired вместо ручной загрузки Spring beans?

У меня есть рабочая реализация для вышеуказанного, но для этого требуется ручная загрузка компонента соединения JNDI, тогда как я бы хотел использовать @Autowired.

Как преобразовать рабочий код в тот, который использует @Autowired, чтобы получить соединение JNDI?

Это мой beans.xml файл (в папке SRC/основные/ресурсы):

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns= ....> 

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="java:comp/env/jdbc/Database"/> 
    </bean> 

    <bean id="databaseMapper2Impl" 
     class="com.dataaccess.DatabaseMapper2Impl"> 
     <property name="dataSource" ref="dataSource" />  
    </bean> 

</beans> 

раздел моего DatabaseMapper2Impl класса:

public class DatabaseMapper2Impl { 

    private DataSource dataSource; 
    private JdbcTemplate jdbcTemplateObject; 

    public void setDataSource(DataSource dataSource) { 
     this.dataSource = dataSource; 
     this.jdbcTemplateObject = new JdbcTemplate(dataSource); 
    } 

    public OrderDTO getOrder(String orderNumber, String envToUse) { 

     String getOrderSql = "SELECT * FROM REPORTING.ORDER where ORDER_NUMBER = ? limit 1"; 
     List<OrderDTO> orders = jdbcTemplateObject.query(getOrderSql, new Object[] { orderNumber }, new OrderMapper()); 
     if (orders == null || orders.isEmpty()) { 
      return null; 
     } else { 
      return orders.get(0); 
     } 
    } 
} 

Это класс, где компонент соединения JNDI создается вручную:

public class DataDelegateImpl { 

    public OrderDTO getOrder(String orderNumber, String envToUse) { 

     ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); 
     DatabaseMapper2Impl x = (DatabaseMapper2Impl) context.getBean("databaseMapper2Impl"); 
     return x.getOrder(orderNumber, envToUse); 
    } 
} 
+0

Какие аннотации вы используете для этой услуги? Похоже, что бобы можно обнаружить весной, основываясь на том, что у вас есть. – Makoto

+0

Не использовать какие-либо аннотации. Бобы загружаются с использованием: 'ApplicationContext context = new ClassPathXmlApplicationContext (" Beans.xml ")'; – Ahmad

ответ

0

Для того, чтобы весна была мужчиной возраст создания и инъекции вашего компонента DatabaseMapper2Impl, вам нужно будет создать ApplicationContext и объявить компонент в этом контексте точно так же, как вы это сделали.

Если вопрос только, как избежать использования XML для этой декларации, вы можете аннотировать DatabaseMapper2Impl с @Component и вместо того, чтобы использовать

ApplicationContext context = new AnnotationConfigApplicationContext(DatabaseMapper2Impl.class); 

создать контекст.

Если вам действительно нужно иметь DatabaseMapper2Impl@Autowired в экземпляр DataDelegateImpl, то этот экземпляр также будет находиться под контролем весной, так что вы должны были бы создать контекст на более высоком уровне и сделать DataDelegateImpl боб также.

 Смежные вопросы

  • Нет связанных вопросов^_^