2016-11-28 1 views
1

J'ai créé le projet avec: http://start.spring.io/ Je le construis avec maven et il fonctionne.Spring Boot Vaadin7 Intégration - Ne peut pas lier avec @Autowired

Donc, je crée une entité personne:

@Entity 
public class Person implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private long id; 

@Temporal(TemporalType.TIMESTAMP) 
private Date birthDay; 

@NotNull(message = "Name is required") 
@Size(min = 3, max = 50, message = "Name must be longer than 3 and less than 40 characters") 
private String name; 

private Boolean colleague; 

private String phoneNumber; 

@NotNull(message = "Email is required") 
@Pattern(regexp = "[email protected]+\\.[a-z]+", message = "Must be valid email") 
private String email; 

//----- GETTERS AND SETTERS ----------- 
} 

Pour cette entité Im la création du référentiel PersonRepo:

public interface PersonRepo extends JpaRepository<Person, Long> { 

@Override 
<S extends Person> S save(S arg0); 

@Override 
long count(); 
} 

Voici la classe myUI:

@SpringUI 
@Theme("valo") 
public class MyUI extends UI { 
private static final long serialVersionUID = 1L; 

private final PersonRepo personRepo; 

@Autowired 
private MyUI(PersonRepo personRepo) { 
    this.personRepo = personRepo; 
} 

@Override 
protected void init(VaadinRequest request) { 
    VerticalLayout layout = new VerticalLayout(); 
    layout.setDefaultComponentAlignment(Alignment.MIDDLE_CENTER); 

    Person person = new Person(); 
    person.setName("Person"); 
    person.setEmail("Email"); 
    person.setColleague(false); 
    person.setBirthDay(new Date()); 
    personRepo.save(person); 

    Label helloWorld = new Label(); 
    helloWorld.setValue("Persons: " + personRepo.count()); 
    helloWorld.setStyleName(ValoTheme.LABEL_H1); 
    helloWorld.setSizeUndefined(); 

    layout.addComponent(helloWorld); 

    setContent(layout); 
} 
} 

Ici, je ne @ Autowire le PersonRepo, en créant une nouvelle personne et en économisant en db, que dans Label je montre le nombre de personnes. Mais personRepo est nul, le @Autowire ne fonctionne pas. Je ne sais pas où est mon erreur ...

Répondre

0

Bien @SpringBootApplication scanne seulement les composants qui sont sur le même paquet et ci-dessous. C'est pourquoi l'application ne peut pas rendre @Autowire. Dans mon exemple, chaque classe est sur un package différent. Ceci peut être corrigé si nous plaçons la classe Application dans le paquet supérieur, ou si nous pouvons définir @ComponentScan manuellement, pour analyser le paquet spécifique.