欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Spring 延迟加载(lazy loading),lazyloading,spring配置文件中的

来源: javaer 分享于  点击 4098 次 点评:98

Spring 延迟加载(lazy loading),lazyloading,spring配置文件中的


spring配置文件中的beans默认情况下是及时加载的,有时候一些类加载耗时很厉害,我们可以通过配置将其设置为延迟加载。

spring配置文件中的beans和bean节点有一个属性是lazy-init,将这个属性的值设置为true时就可以实现延迟加载,放到beans节点上时会影响其下的所有子bean,放在bean上时只影响一个bean。

下面我们用一个例子演示一下延时加载。

package cn.outofmemory.spring.ioc;public class Employee {    private String name;    private String empId;    private Address address;    public Employee() {        System.out.println("Employee Constructor");    }    public Address getAddress() {        return address;    }    public void setAddress(Address address) {        this.address = address;    }    public String getEmpId() {        return empId;    }    public void setEmpId(String empId) {        this.empId = empId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
package cn.outofmemory.spring.ioc;public class Address {    public Address() {        System.out.println("Address Constructor");    }    private String street;    private String city;    private String pincode;    public String getCity() {        return city;    }    public void setCity(String city) {        this.city = city;    }    public String getPincode() {        return pincode;    }    public void setPincode(String pincode) {        this.pincode = pincode;    }    public String getStreet() {        return street;    }    public void setStreet(String street) {        this.street = street;    }}

Spring 配置文件如下下:

<?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:p="http://www.springframework.org/schema/p"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">    <bean id="employeeBean" class="javabeat.net.spring.ioc.Employee" />    <bean id="addressBean" class="javabeat.net.spring.ioc.Address"        lazy-init="true" /></beans>

在Address的bean上设置了lazy-init属性。

测试代码如下:

package javabeat.net.spring.ioc;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class LazyInit {    public static void main(String args[]) {        //Initializing context        ApplicationContext applicationContext = new ClassPathXmlApplicationContext( new String[]{"applicationContext.xml"});        System.out.println("After initialization");        applicationContext.getBean("addressBean");    }}

执行之后可以看到Address bean是在spring容器初始化之后,第一次使用时才做的初始化。

相关栏目:

用户点评