gpt4 book ai didi

Spring @Autowired 不工作

转载 作者:行者123 更新时间:2023-12-04 03:17:21 24 4
gpt4 key购买 nike

我对 Autowiring 注释有一些问题。我的应用程序如下所示:

这是 Controller :

@Controller
public class MyController {
@Autowired
@Qualifier("someService")
private SomeService someService;

....
}

这是一个服务层:
public interface SomeService {
...
}

@Service
public class SomeServiceImpl implements SomeService{
@Autowired
@Qualifier("myDAO")
private MyDAO myDAO;

....
}

和 DAO 层:
public interface MyDAO{
....
}

@Repository
public class JDBCDAOImpl implements MyDAO {
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
....
}

这是一个 app-service.xml 文件:
....
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.properties" />

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"/>

<bean id="SomeService" class="com.service.SomeServiceImpl" />
<bean id="myDAO" class="com.db.JDBCDAOImpl" />

所以......当我启动一个网络应用程序时,MyController Autowires 正确(由 SomeServiceImpl 类对象正确注入(inject)的 someService 字段),但 someService 的 myDAO 字段具有空值(未正确注入(inject))。

你能帮我找出问题吗?

附言这很有趣,但是当我将“bean id”从 myDAO 更改为另一个(例如 myDAO2)时,系统会给我一个错误,即无法完成注入(inject),因为 bean myDAO 不存在。那么,Spring 进行了一次注入(inject),但是它在哪里呢?为什么它不能正常工作?

最佳答案

我找到了解决方案。正如 Javi 所说(非常感谢你,Javi),我必须用 @Repository 注释 DAO 和服务层类。和 @Service注解。现在我试着这样写:

@Service("someService")
public class SomeServiceImpl implements SomeService{
@Autowired
@Qualifier("myDAO")
private MyDAO myDAO;

....
}


@Repository("myDAO")
public class JDBCDAOImpl implements MyDAO {
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
....
}

一切正常!!!

但是我仍然没有找到这个问题的答案:如果应用程序会更复杂,并且结构会更复杂, @Repositore@Service注释对于某些类来说不是首选,如何正确注入(inject)位于较低级别的bean(在类的字段中,或在类的字段中)(当然是 @Autowire注释)?

关于 Spring @Autowired 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com