我正在尝试按照Petri Kainulainen在“ Spring Data”一书中的示例代码创建一个应用程序。我有一个服务RepositoryContactService 包com.packtpub.springdata.jpa.service;
@Service("service")
public class RepositoryContactService implements ContactService {
我的ApplicationContext类设置用于扫描的服务的包
@Configuration
@ComponentScan(basePackages = { "com.packtpub.springdata.jpa.service" })
@EnableTransactionManagement
@EnableWebMvc
@EnableJpaRepositories("com.packtpub.springdata.jpa.repository")
@PropertySource("classpath:application.properties")
public class ApplicationContext extends WebMvcConfigurerAdapter {
我正在运行带有声明的Test类
@Autowired
private static RepositoryContactService service;
和主要方法中的代码
Contact contact = new Contact("handro1104@gmail.com", "handro");
service.save(contact);
问题在于“ service.save(contact);”行给我的服务为空。
答案 0 :(得分:1)
从带注释的@Service的类中,仅创建一个bean,因为@Service的默认方式是Singleton,因此您无需静态自动连接这些类bean。
更改:
@Autowired
private static RepositoryContactService service;
收件人:
@Autowired
private RepositoryContactService service;
答案 1 :(得分:0)
感谢所有回应。我发现您无法自动连接静态字段并尝试
@Component
public class Test {
@Autowired
private ContactService service;
public static void main(String[] args) {
Test test = new Test();
Contact contact = new Contact("handro1104@gmail.com", "handro");
ContactService service = test.service;
service.save(contact);
}
但是那也不起作用。我也尝试过
public class Test {
public static void main(String[] args) {
ContactService service = new RepositoryContactService();
Contact contact = new Contact("handro1104@gmail.com", "handro");
service.save(contact);
}
使用
@Resource // Also tried with @Autowired
private ContactRepository repository;
@Configurable
public class RepositoryContactService implements ContactService {
@Override
public void save(Contact updated) {
repository.save(updated);
}
但是此处的存储库为空。
为了更加清楚,我有
@Configuration
@ComponentScan(basePackages = { "com.packtpub.springdata.jpa.service" })
@EnableTransactionManagement
@EnableWebMvc
@EnableJpaRepositories("com.packtpub.springdata.jpa.repository")
@PropertySource("classpath:application.properties")
public class ApplicationContext extends WebMvcConfigurerAdapter {
以便扫描RepositoryContactService并可以自动装配com.packtpub.springdata.jpa.repository中的ContactRepository。有时我甚至将com.packtpub.springdata.jpa.repository添加到@ComponentScan。
答案 2 :(得分:-1)
Spring无法自动连接RepositoryContactService的原因很多。
尽管这不会解决null问题,但我更喜欢对Interface进行编程,并使用Qualifier告诉spring容器要注入哪个Interface的实现。