基于XML装配bean的解析-Bean的作用域

一、Bean的种类

1、普通bean:<bean  id=""  class="A"> ,spring直接创建A实例,并返回。

2、FactoryBean:是一个特殊的bean,具有工厂生成对象的能力,只能生成特定的对象。bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。

<bean   id="" class="FB"> 先创建FB实例,使用调用getObject()方法,并返回方法的返回值

FB fb = new FB();

return fb.getObject();

BeanFactory 和 FactoryBean 对比?

BeanFactory:工厂,用于生成任意bean。

FactoryBean:特殊bean,用于生成另一个特定的bean。例如:ProxyFactoryBean ,此工厂bean用于生产代理。

<bean  id=""   class="....ProxyFactoryBean"> 获得代理对象实例,AOP使用。

二、作用域

作用域:用于确定Spring创建Bean的实例个数。

 

取值:

singleton 单例,是默认值。

prototype 多例,每执行一次getBean将获得一个实例。例如:struts整合spring,配置action多例。

配置信息:

<bean   id=""   class=""    scope="">

例如:

<bean id="userServiceId"   class="com.zju.scope.UserServiceImpl"    scope="prototype"></bean>

例1:singleton 单例

UserService.java

1
2
3
4
5
package com.zk.myspring;
 
public interface UserService {
    public void addUser();
}

UserServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
package com.zk.myspring;
 
public class UserServiceImpl implements UserService{
 
    @Override
    public void addUser() {
        // TODO Auto-generated method stub
        System.out.println("UserService");
    }
 
}

ApplicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
 
<!-- 默认scope为singleton -->
<bean id="userserviceId"  class="com.zk.myspring.UserServiceImpl" scope="singleton"></bean>
</beans>

TestDemo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.zk.myspring;
 
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 
public class TestDemo {
     
    @Test
    public void demo1(){
        String xmlpath="ApplicationContext.xml";
        ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
        UserService us=ac.getBean("userserviceId", UserServiceImpl.class);
        UserService us2=ac.getBean("userserviceId", UserServiceImpl.class);
        //us.addUser();
        //us2.addUser();
        System.out.println(us);
        System.out.println(us2);
        System.out.println(us==us2);
    }
}

运行效果图:

 

例2:prototype 多例

UserService.java

1
2
3
4
5
package com.zk.myspring;
 
public interface UserService {
    public void addUser();
}

UserServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
package com.zk.myspring;
 
public class UserServiceImpl implements UserService{
 
    @Override
    public void addUser() {
        // TODO Auto-generated method stub
        System.out.println("UserService");
    }
 
}

TestDemo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.zk.myspring;
 
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 
public class TestDemo {
     
    @Test
    public void demo1(){
        String xmlpath="ApplicationContext.xml";
        ApplicationContext ac=new ClassPathXmlApplicationContext(xmlpath);
        UserService us=ac.getBean("userserviceId", UserServiceImpl.class);
        UserService us2=ac.getBean("userserviceId", UserServiceImpl.class);
        //us.addUser();
        //us2.addUser();
        System.out.println(us);
        System.out.println(us2);
        System.out.println(us==us2);
    }
}

ApplicationContext.xml

1
2
3
4
5
6
7
8
9
<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="userserviceId"  class="com.zk.myspring.UserServiceImpl" scope="prototype"></bean>
</beans>

运行效果图:

 

posted @   leagueandlegends  阅读(233)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示