in XML configuration!
Directory Layout

pom.xml
Foo.java
FooImpl.java
Bar.java
BarImpl.java
beans-service.xml
App.java
Build & Execute
Directory Layout

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>biz.tugay</groupId> <artifactId>begsprch01</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>begsprch01</name> <url>http://www.tugay.biz</url> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.5.RELEASE</version> </dependency> </dependencies> <build> <finalName>begsprch01</finalName> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>biz.tugay.begsprch01.App</mainClass> </configuration> </plugin> </plugins> </build> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
Foo.java
package biz.tugay.begsprch01.service; public interface Foo { void foo(); int getCounter(); }
FooImpl.java
package biz.tugay.begsprch01.service; public class FooImpl implements Foo { private static int counter = 0; public FooImpl() { counter++; } public void foo() { System.out.println("FooImpl#foo()"); } public int getCounter() { return counter; } }
Bar.java
package biz.tugay.begsprch01.service.bar; public interface Bar { void bar(); }
BarImpl.java
package biz.tugay.begsprch01.service.bar; import biz.tugay.begsprch01.service.Foo; public class BarImpl implements Bar { private Foo foo; public void bar() { foo.foo(); } public void setFoo(final Foo foo) { this.foo = foo; } }
beans-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="foo" class="biz.tugay.begsprch01.service.FooImpl" /> <bean id="bar" class="biz.tugay.begsprch01.service.bar.BarImpl" autowire="byType" /> </beans>
App.java
package biz.tugay.begsprch01; import biz.tugay.begsprch01.service.Foo; import biz.tugay.begsprch01.service.bar.Bar; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { final ApplicationContext appContx = new ClassPathXmlApplicationContext("beans-service.xml"); final Foo foo = (Foo) appContx.getBean("foo"); foo.foo(); final Bar bar = appContx.getBean("bar", Bar.class); bar.bar(); } }
Build & Execute
MacBook-Pro:begsprch01 koraytugay$ mvn -q clean install MacBook-Pro:begsprch01 koraytugay$ mvn -q exec:java Sep 11, 2017 8:25:23 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@16fe8172: startup date [Mon Sep 11 20:25:23 CEST 2017]; root of context hierarchy Sep 11, 2017 8:25:23 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [beans-service.xml] FooImpl#foo() FooImpl#foo() MacBook-Pro:begsprch01 koraytugay$