Using auto-level dependency in a constructor in spring

I have a NetworkUsageService class that uses NetworkUsageMapper to access a database. The Mapper class is automatically passed to the service class.

I need to access the database while creating the service class, so I am doing something like this:

private int someField;    

@Autowired
private NetworkUsageMapper networkUsageMapper;


public NetworkUsageService() {
    someField = networkUsageMapper.getSomeResultFromDB();
}

However, this does not work, as I get an exception when creating a bean service. Is there a way to use autonomous dependency when building an object?

EDIT: this is my beans configuration on request:

<context:component-scan base-package="mypackage" />
<mybatis:scan base-package="mypackage.mappers" />

<mvc:annotation-driven />

<context:property-placeholder location="classpath:/jdbc.properties"/>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath:mappers/*.xml" />
    <property name="typeAliasesPackage" value="mypackage.transfer" />
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean  id="dataSource"
       class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>
+4
source share
4 answers

, ( , , ), , @PostConstruct. , , networkusermapper.

+10

. bean, . ,

@Autowired
public NetworkUsageService(NetworkUsageMapper mapper){
// do stuff
}
+1

- setterMethod of NetworkUsageMapper, @Required

@Required
public void setNetworkUsageMapper(NetworkUsageMapper mapper){
this.networkUsageMapper = mapper;
this.someField = this.networkUsageMapper.getSomeResultFromDB();
}

. , . , , @Required. .

+1

spring, . , , bean NetworkUsageMapper .

  • , :). , :

    @Autowired (required = false) private NetworkUsageMapper networkUsageMapper;

  • If you need more than one, you need to use a qualifier, for example:

then

@Autowired
@Qualifier("networkUsageMapper1")
private NetworkUsageMapper networkUsageMapper;

Hope this helps: Mak

0
source

All Articles