2012-04-26 3 views
2

우선 Springframwork를 처음 접했습니다.요청에 따라 Spring MVC에서 Class/Bean을 인스턴스화하는 방법은 무엇입니까?

@Controller 
public class FooController { 

    @Autowired 
    private Foo foo; 

    @Autowired 
    private FooService fooService; 

    @RequestMapping(value="/addfoo", method = RequestMethod.GET) 
    public void addRequest(   
     @RequestParam(value="rq_param", required=true) String param){ 

     foo.setValue(param);  
     fooService.addFoo(foo);      
    } 
} 

나는 데이터베이스에 푸를 추가해야합니다

의 나는 스프링 MVC에서 컨트롤러가 있다고 가정 해 봅시다. 하지만 가치를 설정하기 전에. 이것은 특정 요청이 (다른 곳에서) 들어올 때 발생해야합니다.

여기 내 서비스입니다 :

@Service 
public class FooServiceImpl implements FooService { 

    @Autowired 
    private FooDAO fooDAO; 

    @Transactional 
    public void addFoo(Foo foo) { 
     fooDAO.addFoo(foo); 
    } 
} 

하지만이 작동하지 않습니다. 나는 때문에 IOC의에 대한 지식의 나의 부족 ...

덕분에

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fooController': Injection of autowired dependencies failed; 

나는이 기본적인 실수를 한 것을 매우 확신을 얻을!

+0

합니까'Foo'이'@ Service' 주석? –

+0

2 개의자가 주입식 주사기를 가지고 있기 때문에, 오차를 좁히기 위해 그 중 하나 또는 두 개를 주석 처리해야합니다. 야생 추측 : foo 일 수 있습니다 (더 간단한 항목). –

+0

Foo는 POJO가 아니며 서비스가 아닙니다. – Nitram76

답변

3

나는 Foo를 삽입해야한다고 생각하지 않습니다. 인터페이스 기반 서비스 나 컨트롤러가 아닌 모델 객체처럼 보입니다.

요청이 들어 왔을 때 Spring 컨트롤 외부에서 new를 사용하여 만들어야합니다. 요청 매개 변수의 값을 새 Foo 객체에 바인딩하고이를 유지하려고합니다.

Spring 프로젝트의 모든 객체는 bean factory의 제어하에있을 필요는 없습니다.

일반적으로 메서드 범위 내의 개체에 대해 new에 대한 호출이 표시됩니다. 보통 인터페이스가없는 POJO 모델 객체입니다. 당신의 경우가 저에게 그들 중 하나 인 것 같습니다.

+0

제안하는 방식대로 작동합니다. 전에 그걸 알았어. 그러나 종종 new-keyword를 사용하는 것은 좋은 습관이 아니므로 가능한 경우이를 피하고 싶습니다. – Nitram76

+1

아니요,이 경우 정확히 맞습니다. 콩은 모두 봄의 통제하에있을 필요는 없습니다. 규칙을 알고, 예외를 안다. 생각이없는 도가는 결코 좋은 생각이 아닙니다. – duffymo

0
<context:component-scan base-package="service,controllers,dao"></context:component-scan> 

dtd 다음의 servlet.xml에서 편집하십시오.

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

이 파일은 web.xml 파일에 있습니다. u는 @Repository 주석을 추가해야 DAO에 대한

내가 잘못 ..하지만,이 하나를 시도 할 수있다 ..

+0

나는 dao 구현 파일을위한 @Repository를 의미합니다 ... – Raghuveer

관련 문제