views:

89

answers:

1

I'm somewhat new to Spring (using 3.0), so I'm hoping there is a simple answer. If I have a controller that is annotated with @Controller and @RequestMapping and I want to set a property via dependency injection, how do I go about doing that? The controller class doesn't have to appear in the Spring configuration file because it gets picked up automatically because of the @Controller annotation.

Example Controller class:

package gov.wi.dnr.wh.web.spring;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class RehabHomeController {
  private String xxx;

  @RequestMapping(value="/rehab/home", method = RequestMethod.GET)
  public String get() {
    return "whdb.rehabhome";
  }

  public String getXxx() {
    return xxx;
  }

  public void setXxx(String xxx) {
    this.xxx = xxx;
  }
}

Spring configuration:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                            http://www.springframework.org/schema/context 
                      http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;

  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
  </bean>

  <context:component-scan base-package="gov.wi.dnr.wh.web.spring"/>
  <mvc:annotation-driven />

</beans>

This works as is, but I would like to inject the "xxx" property. How do I go about doing that?

+3  A: 
@Autowired
private YourService yourServiceBean;

(you can also use @Inject)

Of course, YourService has to be declared as a bean - either in applicationContext.xml, or by annotations (@Service for example)

If you want to inject string properties, you can use the @Value annotation:

@Value("${propName}")
private String str;

(For that you will need a PropertyPlaceholderConfigurer)

Bozho
Thanks. How would it look in the applicationContext.xml file if I simply wanted to inject a String with a value of "hello"?
GriffeyDog
@GriffeyDog see updated
Bozho
Thanks, perfect!
GriffeyDog