injizieren Ich versuche eine einfache Anwendung im Frühjahr mvc nur mit Anmerkungen. In meiner Serviceklasse kann ich keine DAO-Klasse injizieren, obwohl ich relevante Anmerkungen verwendet habe. Bitte lassen Sie mich wissen, welchen Fehler ich mache. Unten sind meine Klassendefinitionen.nicht in der Lage, Bean in einfache Feder mvc Anwendung
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { SpringRootConfig.class };
//return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { SpringWebConfiguration.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="com.emp.controller")
public class SpringWebConfiguration extends WebMvcConfigurerAdapter{
@Bean
public InternalResourceViewResolver jspViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="com.emp.svc,com.emp.dao")
public class SpringRootConfig {
}
package com.emp.svc;
import org.springframework.beans.factory.annotation.Autowired;
import com.emp.dao.LoginDAO;
public class LoginSvc {
@Autowired
private LoginDAO dao;
public boolean validateLogin(){
System.out.println("In the svc method");
return dao.validateLogin();
}
}
package com.emp.dao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Repository
public class LoginDAO {
public boolean validateLogin(){
System.out.println("In the DAO method");
return true;
}
}
package com.emp.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.emp.forms.LoginForm;
import com.emp.svc.LoginSvc;
@Controller
public class LoginController {
@RequestMapping(value = {"/login"},method = RequestMethod.GET)
public ModelAndView launchLoginPage(){
ModelAndView model = new ModelAndView();
model.setViewName("login");
return model;
}
@RequestMapping(value = {"/welcome"},method = RequestMethod.GET)
public ModelAndView validateLogin(@ModelAttribute LoginForm form){
ModelAndView model = new ModelAndView();
LoginSvc svc = new LoginSvc();
if(svc.validateLogin()){
model.setViewName("welcome");
}
else
{
model.setViewName("login");
}
return model;
}
LoginSvc wird vom Controller aufgerufen. Ich erwarte, dass in LoginSvc LoginDAO injiziert wird und daher der Aufruf von dao dao.validateLogin() erfolgreich ist. Aber was ich bekomme, ist der Null-Zeiger bei dao.validateLogin(), was anzeigt, dass LoginDAO nicht injiziert wird.
Wenn Sie mir mitteilen können, was ich vermisse, wird es eine große Hilfe sein.
Beschriften Sie Ihre 'LoginSvc' -Klasse mit' @ controller' Annotation. – hagrawal
Ich habe separate Controller-Klasse, (ich habe meine Controller-Klasse jetzt hinzugefügt) sollte ich noch Svc-Klasse mit @ Controller kommentieren? – Anveshan
Ja, Sie sollten die 'LoginSvc'-Klasse mit Anmerkungen versehen, damit sie zum Controller wird. Wenn Sie nicht kommentieren, würde spring die Abhängigkeit nicht injizieren. – hagrawal