0
我知道注释和xml有两种依赖注入的方式。我已经尝试了注释方式,一切正常,但是当我尝试使用xml方式时,对我来说某些东西似乎没有意义。从我的控制器中,我需要调用LabSoftDAOImpl对象并调用该方法。在LabSoftDAOImpl类中,我还需要设置数据源,因为它将进行查询。现在我很困惑如何调用LabSoftDAOImpl的新实例,然后使用setter注入来设置它的数据源。不带@Autowired的依赖注入
这是我为spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan
base-package="com.peep.ehr.dependencyBuilder , com.peep.ehr.versionTool , com.peep.ehr.surescript" />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="dataSourceSureScripts"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="xxxxxx" />
<property name="url"
value="xxxxx" />
<property name="username" value="xxxxx" />
<property name="password" value="xxxx" />
</bean>
<bean id="providerDao" class="com.peep.ehr.surescript.ProviderDAOImpl">
<property name="dataSource" ref="dataSourceSureScripts" />
</bean>
<bean id="artifactDao" class="com.peep.ehr.versionTool.ArtifactDaoImpl">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="labSoftDao" class="com.peep.ehr.labSoft.LabSoftDAOImpl">
<property name="dataSource">
<ref local="dataSourceSureScripts" />
</property>
</bean>
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
id="messageSource">
<property name="basename" value="messages" />
</bean>
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:labsoft.properties">
</property>
</bean>
<bean id="labsoft" class="com.peep.ehr.labSoft.LabSoft">
<property name="ehrKey" value="${labsoft.Key}" />
<property name="ehrPrefix" value="${labsoft.Prefix}" />
</bean>
<bean id="labsoftController" class="com.peep.ehr.labSoft.LabSoftController">
<property name="LabSoft" ref="labsoft" />
</bean>
控制器
@Controller
public class LabSoftController {
static LabSoft lb;
String practiceName;
LabSoft LabSoft;
LabSoftDAOImpl labSoftMethods;
public void setLabSoftDAOImpl(LabSoftDAOImpl labsoftimpl){
labSoftMethods = labsoftimpl;
}
public void setLabSoft(LabSoft labsoft){
LabSoft = labsoft;
}
....
LabSoftDAOImpl
public class LabSoftDAOImpl implements LabSoftDAO, InitializingBean {
private DataSource dataSource;
JdbcTemplate jdbcTemplate;
@Override
public void afterPropertiesSet() throws Exception {
if (dataSource == null) {
throw new BeanCreationException("Must set dataSource on LabSoftDAOImpl");
}
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
...
我试过类似的东西,但只是调用LabSoftDAOImpl。为什么它可以和接口类一起工作,但不是它的实现?再次感谢! –
@Jaspreet Chauhan你根本没有在你的xml中为你的控制器设置labSoftDao。使用接口是很好的做法。 – Alex