一 接口
Axe
package org.crazyit.app.service;
public interface Axe
{
// Axe接口里有个砍的方法
public String chop();
}
Person
package org.crazyit.service;
public interface Person
{
public void test();
}
二 实现
Chinese
package org.crazyit.app.service.impl;
import org.crazyit.app.service.*;
import org.crazyit.app.config.*;
public class Chinese implements Person
{
private Axe axe;
private String name;
// axe的setter方法
public void setAxe(Axe axe)
{
this.axe = axe;
}
// name的setter方法
public void setName(String name)
{
this.name = name;
}
// 实现Person接口的useAxe()方法
public void useAxe()
{
// 调用axe的chop()方法,表明Person对象依赖于axe对象
System.out.println("我是:" + name
+ axe.chop());
}
}
StoneAxe
package org.crazyit.app.service.impl;
import org.crazyit.app.service.*;
public class StoneAxe implements Axe
{
public String chop()
{
return "石斧砍柴好慢";
}
}
SteelAxe
package org.crazyit.app.service.impl;
import org.crazyit.app.service.*;
public class SteelAxe implements Axe
{
public String chop()
{
return "钢斧砍柴真快";
}
}
三 通过配置文件配置
<?xml version="1.0" encoding="GBK"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- 配置chinese实例,其实现类是Chinese -->
<bean id="chinese" class="org.crazyit.app.service.impl.Chinese">
<!-- 驱动Spring执行setAxe()方法,以容器中id为stoneAxe的Bean为参数 -->
<property name="axe" ref="stoneAxe"/>
<!-- 驱动Spring执行setName()方法,以字符串"孙悟空"为参数 -->
<property name="name" value="孙悟空"/>
</bean>
<!-- 配置stoneAxe实例,其实现类是StoneAxe -->
<bean id="stoneAxe" class="org.crazyit.app.service.impl.StoneAxe"/>
<!-- 配置steelAxe实例,其实现类是SteelAxe -->
<bean id="steelAxe" class="org.crazyit.app.service.impl.SteelAxe"/>
</beans>
四 通过Java配置类配置
package org.crazyit.app.config;
import org.springframework.context.annotation.*;
import org.springframework.beans.factory.annotation.*;
import org.crazyit.app.service.*;
import org.crazyit.app.service.impl.*;
@Configuration
public class AppConfig
{
// 相当于定义一个名为personName的变量,其值为"孙悟空"
@Value("孙悟空") String personName;
// 配置一个Bean:chinese
@Bean(name="chinese")
public Person person()
{
Chinese p = new Chinese();
p.setAxe(stoneAxe());
p.setName(personName);
return p;
}
// 配置Bean:stoneAxe
@Bean(name="stoneAxe")
public Axe stoneAxe()
{
return new StoneAxe();
}
// 配置Bean:steelAxe
@Bean(name="steelAxe")
public Axe steelAxe()
{
return new SteelAxe();
}
}
五 测试类
package lee;
import org.springframework.context.*;
import org.springframework.context.support.*;
import org.springframework.context.annotation.*;
import org.crazyit.app.service.*;
import org.crazyit.app.config.*;
public class BeanTest
{
public static void main(String[] args)throws Exception
{
// 创建Spring容器
ApplicationContext ctx = new
AnnotationConfigApplicationContext(AppConfig.class);
// ApplicationContext ctx = new
// ClassPathXmlApplicationContext("beans.xml");
// 获取chinese 实例
Person p = ctx.getBean("chinese" , Person.class);
// 调用useAxe()方法
p.useAxe();
}
}
六 测试结果
我是:孙悟空石斧砍柴好慢