spring aop 之三利用aop實現池
spring默認是singleton的,在2.5中可以實現池,這樣在獲取bean實例時就可以從池中獲取。
xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans
<bean id="groupUserTarget" class="cn.com.ultrapower.domain.GroupUser" scope="prototype">
</bean>
<bean id="poolTargetSource" class="org.springframework.aop.target.CommonsPoolTargetSource">
<property name="targetBeanName" value="groupUserTarget"/>
<property name="maxSize" value="5"/>
</bean>
<bean id="groupUser" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="poolTargetSource"/>
</bean>
</beans>
這里GroupUser是一個模型,模擬某組用戶,是一個普通的javabean。poolTargetSource中設置了maxSize,表示最大值是5。并且獲取groupUser的方式是使用ProxyFactoryBean。
獲取groupUser的方式如下:
public static void main(String[] args) {
for (int i = 0; i < 6; i++) {
// 通過池獲取
GroupUser gu = (GroupUser)BeanFactory.getInstance().getBean("groupUser");
// 不通過池,直接獲取,則每次都重新創建
// GroupUser gu = (GroupUser)BeanFactory.getInstance().getBean("groupUserTarget");
System.out.println(gu.toString());
}
}
在groupUser中使用
public groupUser(){
System.out.println("creat a groupUser");
}
這樣就可以看到groupUser創建了幾次。