Spring 延迟加载(lazy loading),lazyloading,spring配置文件中的
分享于 点击 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容器初始化之后,第一次使用时才做的初始化。
用户点评