Я новичок в Spring. Мой вопрос заключается в том, как ввести значение, загруженное из базы данных (dyanmic list of business units from db) в другой компонент для некоторой обработки.Впрыск весенней зависимости для динамического списка из базы данных
Я делаю следующее из своего кода.
/*** Sample code Starts here ****/
/* Load Подразделения из баз данных, используя метод загрузки */
public class BusinessUnitDaoImpl implements BusinessUnitDao {
private JdbcTemplate jdbctemplate;
public BusinessUnitDaoImpl() {
super();
}
public BusinessUnitDaoImpl(DataSource ds) {
this.jdbctemplate=new JdbcTemplate(ds);
}
@Override
public List<BusinessUnit> load() {
String SQL = "select * from business_unit";
List<BusinessUnit> businessunits = jdbctemplate.query(SQL,
new BusinessUnitRowMapper());
return businessunits;
}
}
/* БЕ Row Mapper */
public class BusinessUnitRowMapper implements RowMapper<BusinessUnit> {
public BusinessUnitRowMapper() {
// TODO Auto-generated constructor stub
}
public BusinessUnit mapRow(ResultSet rs, int rowNum) throws SQLException {
BusinessUnit bunit = new BusinessUnit();
bunit.setBusinessUnitId(rs.getInt("business_unit_id"));
bunit.setBusinessUnitDesc(rs.getString("business_unit_desc"));
bunit.setCurrencyCode(rs.getString("currency_code"));
return bunit;
}
}
/* БЕ VO */
public class BusinessUnit {
private int businessUnitId;
private String businessUnitDesc;
private String currencyCode;
public BusinessUnit() {
super();
}
public int getBusinessUnitId() {
return businessUnitId;
}
public void setBusinessUnitId(int businessUnitId) {
this.businessUnitId = businessUnitId;
}
public String getBusinessUnitDesc() {
return businessUnitDesc;
}
public void setBusinessUnitDesc(String businessUnitDesc) {
this.businessUnitDesc = businessUnitDesc;
}
public String getCurrencyCode() {
return currencyCode;
}
public void setCurrencyCode(String currencyCode) {
this.currencyCode = currencyCode;
}
@Override
public String toString() {
return "BusinessUnit [businessUnitId=" + businessUnitId
+ ", businessUnitDesc=" + businessUnitDesc + ", currencyCode="
+ currencyCode + "]";
}
}
/* Some Serv лед, который вызывает дао для загрузки бизнес-единицы */
public class HarmonyService {
private BusinessUnitDao budao;
private RequestDetails requestDetails;
public HarmonyService(BusinessUnitDao budao,RequestDetails requestDetails) {
this.budao=budao;
this.requestDetails=requestDetails;
}
public List<BusinessUnit> show() {
return budao.load();
}
public WFRequest getDetail(long requestId) {
return requestDetails.load(requestId);
}
}
Spring XML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:property-placeholder location="file:${databaseConfiguration}"/>
<bean id="AmericasDataSource" class="dell.harmony.data.HarmonyBasicDataSource" destroy-method="close" >
<property name="url"><value>${HarmonyAmericasDb.url}</value></property>
<property name="driverClassName"><value>${HarmonyAmericasDb.driverClassName}</value></property>
<property name="username"><value>${HarmonyAmericasDb.username}</value></property>
<property name="password"><value>${HarmonyAmericasDb.password}</value></property>
<property name="removeAbandoned"><value>${HarmonyAmericasDb.removeAbandoned}</value></property>
<property name="initialSize"><value>${HarmonyAmericasDb.initialSize}</value></property>
<property name="maxActive"><value>${HarmonyAmericasDb.maxActive}</value></property>
</bean>
<bean id="EMEADataSource" class="dell.harmony.data.HarmonyBasicDataSource" destroy-method="close" >
<property name="url"><value>${HarmonyEMEADb.url}</value></property>
<property name="driverClassName"><value>${HarmonyEMEADb.driverClassName}</value></property>
<property name="username"><value>${HarmonyEMEADb.username}</value></property>
<property name="password"><value>${HarmonyEMEADb.password}</value></property>
<property name="removeAbandoned"><value>${HarmonyEMEADb.removeAbandoned}</value></property>
<property name="initialSize"><value>${HarmonyEMEADb.initialSize}</value></property>
<property name="maxActive"><value>${HarmonyEMEADb.maxActive}</value></property>
</bean>
<bean id="budao" class="test.dao.BusinessUnitDaoImpl">
<constructor-arg index="0"><ref bean="AmericasDataSource"/></constructor-arg>
</bean>
<bean id="requestdao" class="test.dao.RequestDetailImpl">
<constructor-arg index="0"><ref bean="AmericasDataSource"/></constructor-arg>
</bean>
<bean id="service" class="test.service.HarmonyService">
<constructor-arg index="0"><ref bean="budao"/></constructor-arg>
<constructor-arg index="1"><ref bean="requestdao"/></constructor-arg>
</bean>
</beans>
/* Тест приложение для тестирования пружины */
public class MyApp {
public static void main(String args[]) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Spring-All-Module.xml");
HarmonyService hservice = (HarmonyService) context.getBean("service");
System.out.println(hservice.show());
System.out.println(hservice.getDetail(13090000000001L));
}
}
/*** Sample code ends here ****/
Вопрос:
Если предполагается, я хочу ввести список бизнес-единиц из метода загрузки сервиса HarmonyService, как это сделать что?
Предположим, у меня есть класс процессора, что-то вроде BatchProcessor ниже.
public class BatchProcessor {
public List<BusinessUnit> proces(List<BusinessUnit> businessUnitList) {
//do some processing here.
}
}
как придать динамически созданный businessUnit в локальный метод переменной businessUnitList с помощью пружинного XML (пожалуйста, объясните с Java кодом и изменения весной XML).
- Можно ли вводить динамический список в локальную переменную метода.
- Приведите пример того, как вводить значение в переменную экземпляра, предполагая, что указанный выше businessUnitList является экземпляром varaible вместо локальной переменной метода.
С уважением, Raghu
Я возьму ответ выше.
Как я уже говорил ранее, я очень новичок в весне. У меня возникла идея, когда я исследовал Stackoverflow еще один вопрос.
Предположим, что businessUnitList является переменной экземпляра.
public class BatchProcessor {
public BatchProcessor(List<BusinessUnit> businessUnitList) {
this.businessUnitList=businessUnitList;
}
private List<BusinessUnit> businessUnitList;
public List<BusinessUnit> getBusinessUnitList() {
return businessUnitList;
}
public void setBusinessUnitList(List<BusinessUnit> businessUnitList) {
this.businessUnitList = businessUnitList;
}
public List<BusinessUnit> process() {
System.out.println("Started processing the business Units" + businessUnitList);
//do some processing
return this.businessUnitList;
}
Из программы MyApp Main я могу это сделать.
BatchProcessor bprocess = (BatchProcessor) context.getBean("bprocessor", hservice.show());
System.out.println(bprocess.process());
//context.getBean("bprocessor",hservice.показать()); здесь я отправляю динамический список из hservice.show, который подключается к базе данных и получает список бизнес-единиц.
теперь снова, i'lll вызывать метод процесса BatchProcessor.
Это хороший способ сделать что-то?
В принципе, когда мы хотим передать значение, мы должны вызвать, contextbean, с аргументом.
My Spring XML:
<!-- passing a dummy list to the constructor -->
<bean id="bprocessor" class="test.rules.BatchProcessor" scope="prototype">
<constructor-arg type="java.util.List">
<list>
<ref bean="bunit"/>
</list>
</constructor-arg>
я прав?
я рекомендую вместо того, чтобы с помощью удивительного AOP в Spring предлагается получить DI на не контейнерные управляемых классах. Это очень просто и очень универсально. –
@ JasperBlues: В соответствии с OP он является новым для Spring и DI, поэтому я думаю, что он не должен погружаться в АОП, прежде чем изучать основы. – anubhava
Вам не нужно знать AOP, чтобы использовать эту функцию - Spring заботится о ней для вас. Конечным результатом является DI на неконтейнерных управляемых классах. , Это та же история, что вам не нужно знать AOP, чтобы использовать аннотацию @Transactional, которая также основана на AOP. –