在spring中使用构造函数中的autowired依赖项

Wol*_*olf 5 java spring autowired

我有类的NetworkUsageService,它使用NetworkUsageMapper来访问数据库.Mapper类自动连接到服务类.

我需要在构造服务类的过程中访问数据库,所以我这样做:

private int someField;    

@Autowired
private NetworkUsageMapper networkUsageMapper;


public NetworkUsageService() {
    someField = networkUsageMapper.getSomeResultFromDB();
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用,因为我在创建服务bean时遇到异常.有没有办法在构造对象时使用自动连接的依赖?

编辑:这是我的bean配置按要求:

<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>
Run Code Online (Sandbox Code Playgroud)

小智 11

而不是在构造函数中做很多工作(并且可能因为应用程序在未完全初始化时尝试转到数据库而引入问题),最好在不同的方法中进行初始化并使用@PostConstruct进行注释.通过这种方式,您可以确保在调用networkusermapper之前,应用程序已完全连线.