Accessing Spring Properties

Spring’s IoC is wonderful, and annotating classes for auto-configuration and wiring is exceptionally useful. But when you have a primitive value to set on an object, it can be tedious to manually define the bean in your context.xml. Here is an example:

@Service
public class MainframeHealthService implements IMainframeHealthService {

        private String host;
        private String port;
        private String healthCheckEndpoint = "/mainframe/health";

        public String getHealthStatus() {
                /* operation to check the status and return */
        }
}

Now, I could set the host as a bean in the context.xml:

<bean id="mainframeHealthSvc" class="main.MainframeHealthService" p:host="${mainframe.host}" p:url="${mainframe.port}"/>

But, here is another option — the Value annotation! It uses the same formatting as using the property placeholder but directly inside the class.

@Service
public class MainframeHealthService implements IMainframeHealthService {
        @Value("${mainframe.host}")
        private String host;
        @Value("${mainframe.port}")
        private String port;
        private String healthCheckEndpoint = "/mainframe/health";

        public String getHealthStatus() {
                /* operation to check the status and return */
        }
}

This does create a hard-coded dependency on that property. If it isn’t found by the container during bean processing, an IllegalArgumentException (“Could not resolve placeholder…”) is thrown.

One thought on “Accessing Spring Properties

Comments are closed.