5

I AspectJ gerade umgesetzt wie hier beschrieben: https://stackoverflow.com/a/10998044/2182503AspectJ: Autowired Felder sind null in Initbinder

Diese Lösung funktioniert gut, bis ich bemerkte, dass mein @Autowired Felder innerhalb @InitBinder null sind. Die Felder sind nur null innerhalb der @InitBinder.

@Controller 
public class EmployeeController { 
    @Autowired private GenericDaoImpl<Role, Integer> roleDao; 
    @Autowired private GenericDaoImpl<Employee, Integer> employeeDao; 
    @Autowired private EmployeeValidator employeeValidator; 

    @InitBinder 
    private void initBinder(WebDataBinder binder) { 
     // autowired fields are null 
     binder.setValidator(employeeValidator); 
     binder.registerCustomEditor(Set.class, "roles", new CustomCollectionEditor(Set.class) { 
      protected Object convertElement(Object element) { 
       if (element != null) { 
        Integer id = new Integer((String) element); 
        Role role = roleDao.findById(id); 
        return role; 
       } 
       return null; 
      } 
     }); 
    } 

    @PreAuthorize("hasRole('MASTERDATA_VIEW')") 
    @RequestMapping(value = { "/employees" }, method = RequestMethod.GET) 
    public ModelAndView showEmployeeList() { 
     // dao not null 
     List<Employee> employees = employeeDao.findAll(); 
      ... 
    } 

Ich kann nicht verstehen, warum sie manchmal null sind und somethimes nicht. (Innerhalb der gleichen Klasse)

Antwort

10

@Initbinder müssen public deklariert werden.

+0

Vielen Dank, eine der Methoden in meinem Controller wurde als privat markiert. Konnte nicht herausfinden, warum alle anderen arbeiteten und das war nicht. – Hiro2k