У меня есть некоторые проблемы с аннотацией autowire. Мое приложение выглядит так:
Вот контроллер:
@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 правильно (поле someService правильно введено объектом класса SomeServiceImpl), но поле myDAO для someService имеет нулевое значение (не введено должным образом).
Не могли бы вы помочь мне найти проблему?
P.S. Это интересно, но когда я меняю "идентификатор компонента" с myDAO на какой-либо другой (например, myDAO2), система выдает мне ошибку, что инъекция не может быть выполнена, потому что bean myDAO не существует. Итак, Spring делает инъекцию, но где она? И почему это не работает правильно?