2016-11-28 55 views
1

我创建的项目:http://start.spring.io/ 我用maven构建它,它正在运行。Spring Boot Vaadin7集成 - 无法绑定@Autowired

所以我创建实体的人:

@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 ----------- 
} 

对于这个实体林创建库PersonRepo:

public interface PersonRepo extends JpaRepository<Person, Long> { 

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

@Override 
long count(); 
} 

这里是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); 
} 
} 

这里只I @ Autowire PersonRepo,创建新人并保存在分贝中,比标签我显示的人数。但是personRepo为null,@Autowire不起作用。我不知道我的错误在哪里...

回答

0

那么@SpringBootApplication只扫描位于同一个包和下面的组件。这就是为什么应用程序不能使@Autowire。在我的例子中,每个班级都有不同的包装。

如果我们将Application类放入顶层包中,或者我们可以手动定义@ComponentScan来扫描特定的包,我们可以修复这个问题。