使用配置文件引用服务的spring控制器

使用配置文件引用服务的spring控制器,spring,spring-mvc,Spring,Spring Mvc,我有一个SpringMVC项目。我有一个控制器,定义如下: public class HelloController { private HelloService helloService; @RequestMapping("/hello") public void sayHello() { helloService.sayHello(); } } public class HelloServiceImpl implements HelloS

我有一个SpringMVC项目。我有一个控制器,定义如下:

public class HelloController {

    private HelloService helloService;

    @RequestMapping("/hello")
    public void sayHello() {
        helloService.sayHello();
    }
}
public class HelloServiceImpl implements HelloService {

public void sayHello() {
    System.out.println("Hello Spring !");
}
}
public interface HelloService {

void sayHello();
}
<mvc:annotation-driven/>
<context:component-scan base-package="com.pack"/>

<bean id="HelloController" class="com.pack.controllers.HelloController">
    <property name="helloService" ref="HelloService"></property>
</bean>
<bean id="HelloService" class="com.pack.services.HelloServiceImpl"/>
我的服务如下:

public class HelloController {

    private HelloService helloService;

    @RequestMapping("/hello")
    public void sayHello() {
        helloService.sayHello();
    }
}
public class HelloServiceImpl implements HelloService {

public void sayHello() {
    System.out.println("Hello Spring !");
}
}
public interface HelloService {

void sayHello();
}
<mvc:annotation-driven/>
<context:component-scan base-package="com.pack"/>

<bean id="HelloController" class="com.pack.controllers.HelloController">
    <property name="helloService" ref="HelloService"></property>
</bean>
<bean id="HelloService" class="com.pack.services.HelloServiceImpl"/>
界面如下:

public class HelloController {

    private HelloService helloService;

    @RequestMapping("/hello")
    public void sayHello() {
        helloService.sayHello();
    }
}
public class HelloServiceImpl implements HelloService {

public void sayHello() {
    System.out.println("Hello Spring !");
}
}
public interface HelloService {

void sayHello();
}
<mvc:annotation-driven/>
<context:component-scan base-package="com.pack"/>

<bean id="HelloController" class="com.pack.controllers.HelloController">
    <property name="helloService" ref="HelloService"></property>
</bean>
<bean id="HelloService" class="com.pack.services.HelloServiceImpl"/>
我的配置文件如下:

public class HelloController {

    private HelloService helloService;

    @RequestMapping("/hello")
    public void sayHello() {
        helloService.sayHello();
    }
}
public class HelloServiceImpl implements HelloService {

public void sayHello() {
    System.out.println("Hello Spring !");
}
}
public interface HelloService {

void sayHello();
}
<mvc:annotation-driven/>
<context:component-scan base-package="com.pack"/>

<bean id="HelloController" class="com.pack.controllers.HelloController">
    <property name="helloService" ref="HelloService"></property>
</bean>
<bean id="HelloService" class="com.pack.services.HelloServiceImpl"/>

错误是您需要为bean helloService生成get和set

Bean属性“helloService”不可写或具有无效的setter方法。setter的参数类型与getter的返回类型匹配吗

但是,如果您尝试注入bean,甚至手动进行配置,则需要在@Autowire中添加注释

@Autowire
private HelloService helloService;

错误是您需要为bean helloService生成get和set

Bean属性“helloService”不可写或具有无效的setter方法。setter的参数类型与getter的返回类型匹配吗

但是,如果您尝试注入bean,甚至手动进行配置,则需要在@Autowire中添加注释

@Autowire
private HelloService helloService;

在HelloController类中添加helloservice的setter和getter可以解决这个问题。应该不需要添加@autowired注释,这样做之后

在HelloController类中添加helloservice的setter和getter就可以了。应该不需要添加@autowired注释,然后添加@autowired注释您可以通过提供用于注入helloService的setter方法来实现,如下所示
//塞特注射

  public void setHelloService(HelloService helloService) {
    this.helloService = helloService;
  }
或者您可以通过使用构造函数注入为注入helloService提供构造函数来实现它,如下所示
//构造函数注入

 public HelloController (HelloService helloService) {
   this.helloService = helloService;
}
//配置文件中的更改

<bean id="HelloController" class="com.pack.controllers.HelloController">
    <constructor-arg ref="HelloService"/>


您可以通过提供用于注入helloService的setter方法来实现它,如下所示
//塞特注射

  public void setHelloService(HelloService helloService) {
    this.helloService = helloService;
  }
或者您可以通过使用构造函数注入为注入helloService提供构造函数来实现它,如下所示
//构造函数注入

 public HelloController (HelloService helloService) {
   this.helloService = helloService;
}
//配置文件中的更改

<bean id="HelloController" class="com.pack.controllers.HelloController">
    <constructor-arg ref="HelloService"/>


如果您有XML配置,则添加
@Autowired
是毫无意义的。如果您有XML配置,则添加
@Autowired
是毫无意义的。将
@Autowired
放在字段上是一种糟糕的做法。现在,您已经了解了为什么它不好了。将
@Autowired
放在字段上是一种不好的做法。现在你已经经历了为什么它不好。