2016-03-25 14 views
0

Java Spring MVC projesinde çalışıyorum. Gözatıcıdan alt yöntemi erişirken kontrol sınıfları"this.personService", niçin yalnızca sub() yöntemi diğer sınıftan çağrıldığında boştur?

birine PersonController.java

@Controller 
@SessionAttributes({ "mob_Number"}) 
public class PersonController { 

    private static final Logger logger = LoggerFactory.getLogger(PersonController.class); 

    private PersonService personService; 

    @Autowired(required=true) 
    @Qualifier(value="personService") 
    public void setPersonService(PersonService ps){ 
     this.personService = ps; 
    } 

    public PersonController(PersonService personService){ 
     this.personService = personService; 
    } 


    public PersonController(){ 

    } 

    .... 

     @RequestMapping(value="/sub",method = RequestMethod.POST, headers = "Accept=application/json") 
    @ResponseBody 
    public String sub(@RequestBody String json){ 


     List result = this.personService.getNumber(); 

    .... 
} 

Yukarıdaki this.personService olarak

boş değil.

PersonServiceImpl.java

@Service 
public class PersonServiceImpl implements PersonService, UserDetailsService { 

    private static final Logger logger = LoggerFactory.getLogger(PersonServiceImpl.class); 


    private PersonDAO personDAO; 

    private PersonService personService; 

    public void setPersonDAO(PersonDAO personDAO) { 
     this.personDAO = personDAO; 
    } 

     PersonController personController = new PersonController(personService); 

     String res = personController.sub(codeJSON.toString()); 

.... 

} 

şöyle yöntemiyle yukarıdaki "this.personService" null döndürür aracılığıyla yapılırsa

Ama başka bir sınıfta

, ben alt yöntemini çağırın.

1) Neden böyle oluyor? 2) Bu sorunu nasıl giderebilirim?

+0

içindeki PersonService tükendiğini fark onun tuhaf, diğer hizmet veya DAO fasulye referans alınmalıdır setter enjeksiyonu ('@ Autowired' işlevini kurucuya taşıyın). – chrylis

+0

'PersonServiceImpl' personService'ini nereden alıyor? Görünüşe göre belki de bunun yerine 'bunu kullanmalısınız. – chrylis

+0

yeni PersonController (personService); <- personService bu noktada boş. Ayrıca, enjekte edilen bağımlılıkları olan çerçeveden kurtarmak yerine, denetleyicinin yeni bir örneğini oluşturuyorsunuz. – RubioRic

cevap

2

1) PersonController fasulye başlatmasını yerine bir yönteme sub yönteminden mantığı göç olmalı) siz) hizmetinden

2 denetleyicisi erişmeye asla taşıyamazsınız Bahar (sizin için enjekte izin veriyorsun PersonService iç ve

Kişisel PersonService bunu kullanmak istediğinizde, yani bir yay fasulye olduğunu doğrudan hizmet

Bazı diğer ayrıntılar dışında, ayrıca Denetleyici'deki sub yönteminden bu yöntemi çağırın sen çerçevenin ör. @Autowire, aksi takdirde boş olacaktır.

Bir hizmet katmanı bir enjekte mülkiyet * *, sen yapıcı enjeksiyon yerine kullanmalısınız gerekli olup olmadığını, sadece bir not olarak PersonServiceImpl

+0

Bu sefer problem değil, en azından doğrudan. – chrylis

+0

onun kesinlikle bir sorun, sadece bir tane değil, benim cevabımı düzenleyecektir biraz –

+0

Bu noktada 'personService' inisitalize edilmiş olsaydı bir sorun olmazdı. – chrylis

İlgili konular