Spring 实例化bean

来源:互联网 发布:自如怎么样知乎 编辑:程序博客网 时间:2024/05/14 04:12

Spring实例化bean一般有3种方式:通过bean的自身构造函数,通过工厂类和通过别的实体bean的方法.
通过bean的自身构造函数是最普通也是最常用的一种,在XML配置如下:
<bean id="exampleBean" class="examples.ExampleBean"/>
通过工厂类构造bean:
<bean id="clientService"
        class="examples.ClientService"
                  factory-method="createInstance"/>
                   
public class ClientService {
    private static ClientService clientService = new ClientService();
    private ClientService() {}
    public static ClientService createInstance() {
        return clientService;
    }
}
 
通过别的实体bean的方法:
<bean id="serviceLocator" class="examples.DefaultServiceLocator"/>


<bean id="clientService" 
    factory-bean="serviceLocator" 
        factory-method="createClientServiceInstance"/>
 
public class DefaultServiceLocator {
    private static ClientService clientService = new ClientServiceImpl();
    private DefaultServiceLocator() {}
    public ClientService createClientServiceInstance() {
        return clientService;
    }
}
 

我们通常把负责加载bean的BeanFactory或者ApplicationContext叫做Spring容器。两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,

主要区别在于BeanFacotry是延迟加载,在调用getBean()的时候才实例化要get的bean。如果Bean的某一个属性无法注入,这时候才会抛出异常;而ApplicationContext默认

在初始化自身的时候就会对所有的bean做实例化,除非对bean设置lazy-init="true",这样有利于检查所依赖属性是否能注入。另外,

ApplicationContext提供了更多的扩展功能,如对要加载的资源文件的国际化’处理,对BeanPostProcessor的处理,所以在J2EE应用中,通常情况下我们都选择使用ApplicationContext.

不管是使用BeanFactory还是ApplicationContext,Spring 默认以singleton的方式初始化bean.

对于BeanFactory的初始化,通常用下面的代码:
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
对于ApplicationContext的初始化,通常在web.xml中配置:

    <context-param>    
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:conf/Appcontext.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

或者用下面的代码:
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml", "applicationContext-part2.xml"});

原创粉丝点击