1 construction注入
也就是直接调用这个类的构造器,并把参数传进去。
<bean id="trade" class="myPackage.Trade">
<constructor-arg index="0"value="123456" />
<constructor-arg index="1"ref="account" />
</bean>
<bean id="acccount" class="myPackage.account">
</bean>
2 setter注入
也就是先调用default constructor创建一个对象,然后再调用其setter方法来初始化该对象。
<bean id="trade" class="myPackage.Trade">
<property name="id"value="123456" />
<property name="account"ref="account" />
</bean>
3 工厂方法
抽象接口:
1. public interface IMusicBox {
2. public void play();
3. }
3.1 静态工厂方法
工厂类:
1. public class MusicBoxFactory {
2. public static IMusicBox createMusicBox(){
3. return new IMusicBox(){
4. public void play(){
5. System.out.println("Play piano...");
6. }
7. };
8. }
9. }
配置文件:
1. <bean id="musicBox" class="test.spring.MusicBoxFactory" factory-method="createMusicBox" />
测试类:
1. public static void main(String[] args) {
2. ApplicationContext ctx =
3. new ClassPathXmlApplicationContext("bean-config.xml");
4. IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
5. musicbox.play();
6. }
3.2工厂实例方法
工厂类:
1. public class MusicBoxFactory {
2. public IMusicBox createMusicBox(){//没有static修饰
3. return new IMusicBox(){
4. public void play(){
5. System.out.println("Play piano...");
6. }
7. };
8. }
9. }
配置文件:
1. <bean id="factoryBean" class="test.spring.MusicBoxFactory" />
2. <bean id="musicBox" factory-bean="factoryBean" factory-method="createMusicBox" />
“factory-bean”属性指定工厂Bean,”factory-method”属性指定工厂方法来取得Bean实例。
测试类:
1. public static void main(String[] args) {
2. ApplicationContext ctx =
3. new ClassPathXmlApplicationContext("bean-config.xml");
4. IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
5. musicbox.play();
6. }
3.3工厂类实现FacotryBean接口
工厂类:
1. import org.springframework.beans.factory.FactoryBean;
2.
3. public class MusicBoxFactory2 implements FactoryBean {
4. public Object getObject() throws Exception {
5. return new IMusicBox(){
6. public void play(){
7. System.out.println("Play piano...");
8. }
9. };
10. }
11.
12. public Class getObjectType() {
13. return IMusicBox.class;
14. }
15.
16. public boolean isSingleton() {
17. return false;
18. }
19. }
配置文件:
1. <bean id="musicBox" class="test.spring.MusicBoxFactory2"/>
测试类:
1. public static void main(String[] args) {
2. ApplicationContext ctx =
3. new ClassPathXmlApplicationContext("bean-config.xml");
4. //不加 & 返回工厂的“产品”
5. IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
6. musicbox.play();
7. //加 & 返回工厂类实例
8. Object obj = ctx.getBean("&musicBox");
9. System.out.println(obj.getClass().getName());
10.
11. }
实现FactoryBean接口的类不会被视为普通的Bean,Spring会自动检测,调用getObject方法获取Bean实例