Хитрый вопрос; это немного субъективно и действительно зависит только от ваших личных предпочтений или консенсуса вашей команды разработчиков. Мне лично нравятся аннотации, потому что я чувствую, что они более гибкие. Если вам нужно следовать соглашениям, чтобы заставить ваш фреймворк «автоматически» делать что-то, вы застряли на том соглашении, которое решили разработчики фреймворка (да, обычно это не плохое соглашение, но вы застрял с ним). Во время моего использования Spring (2 года или около того) всегда казалось, что наша команда начала использовать COC, но потом поняла, что наши потребности не совсем соответствуют типичному соглашению.
Я также чувствую, что аннотации улучшают читабельность вашего кода. Глядя на аннотированный класс, я могу понять, что он делает и как он делает, не обращаясь к контексту приложения.
Что касается вашего второго вопроса (внедрение bean-компонентов в контроллер), вот код, показывающий, как я обычно подключаю контроллер.
Веб-servlet.xml
<context:component-scan base-package="com.test.web.controllers" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
TestController.java
package com.test.web.controllers
import com.test.dao.TestDAO;
@Controller
public class TestController {
@Autowired
@Qualifier("myTestDAO")
private TestDAO testDAO;
@RequestMapping(value = "/welcome.htm*", method = RequestMethod.GET)
public ModelMap showWelcomePage() {
ModelMap model = new ModelMap();
model.addAttribute("products", testDAO.getOfferedProducts());
return model;
}
}
TestDAO будет иметь следующее объявление класса:
@Repository("myTestDAO")
public class TestDAO {
Я обычно не использую проводку конструктора, потому что это обычно проще, но если вам нужна проводка конструктора, я могу опубликовать пример этого.