Я использую Spring 3 MVC, у меня проблема с введением объектов.Я создал объект контроллера с @Controller
.И я создал объект службы с помощью объекта @Service
.Я ввел сервисный объект в контроллер с помощью AutoWire.И я создал объект DAO, и вставил в объект службы, и протестировал приложение, оно работает нормально.Затем я поставил @Transactional
на DAO, тогда тоже все работало нормально.Но когда я ставлю @Transactional
на сервисный объект, это дает мне проблему.Во время развертывания на контроллере он говорит: «
Сбой инициализации контекста: org.springframework.beans.factory.BeanCreationException: Ошибка при создании бина с именем« loginController »: сбой внедрения зависимостей с автопроводкой»; вложенным исключением является org.springframework.beans.factory.BeanCreationException: Не удалось автоматически связать метод: public void com.erudicus.controller.LoginController.setLoginService (com.erudicus.model.service.LoginServiceImpl): несоответствие типа аргумента ".
Вот код контроллера
@Controller
public class LoginController {
private static Logger LOG = Logger.getLogger(LoginController.class);
private LoginServiceImpl loginService = null;
public LoginServiceImpl getLoginService() {
return loginService;
}
@Autowired
public void setLoginService(LoginServiceImpl loginService) {
this.loginService = loginService;
}
@RequestMapping(value="/login" , method= RequestMethod.GET)
public String login(Model model) {
model.addAttribute(new Login());
return "login";
}
@RequestMapping(value="/loginDetails", method=RequestMethod.POST)
public ModelAndView create(@Valid Login login, BindingResult result) {
}
}
Сервисный объект
@Service
public class LoginServiceImpl implements LoginService {
private LoginDao loginDao = null;
public LoginDao getLoginDao() {
return loginDao;
}
@Autowired
public void setLoginDao(LoginDao loginDao) {
this.loginDao = loginDao;
}
@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public Login getUserDetails(String userId) {
return getLoginDao().getUserDetails(userId);
}
}
Дао
@Service
@Transactional(propagation = Propagation.MANDATORY)
public class LoginDaoImpl extends SqlSessionDaoSupport implements LoginDao {
@Transactional(readOnly = true, propagation = Propagation.MANDATORY)
public Login getUserDetails(String userId) {
}
}
В Конфигурации я указал
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
<!-- enable autowire -->
<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
<context:annotation-config/>
Любой может помочь, пожалуйста