Beand的高级特征
Spring程序中,Java Bean一般与Spring是非耦合的,不会依赖于Spring类库。这也是Spring的优点。
实现BeanNameAware接口获取本bean的id属性
BeanNameAware中一个方法setBeanName(String arg0);它会在bean所有参数设置后 init-method之前调用,在bean中声明一个属性接受。
实现BeanFactoryAware可以获取该bean对应的BeanFactory。
demo:
package com.dao.impl; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.BeanNameAware; public class FindBeanName implements BeanNameAware,BeanFactoryAware{ private String beanName; private BeanFactory beanFactory; public void setBeanName(String beanName) { this.beanName=beanName; } public String getBeanName(){ return beanName; } public void setBeanFactory(BeanFactory arg0) throws BeansException { this.beanFactory=arg0; } public BeanFactory getBeanFactory(){ return beanFactory; } } package com.test; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import com.Model.Cat; import com.dao.impl.FindBeanName; public class TestAware { @Test public void GetName(){ XmlBeanFactory factory=new XmlBeanFactory( new ClassPathResource("com/test/applicationContext.xml")); FindBeanName dbn=(FindBeanName) factory.getBean("hehe"); System.out.println(dbn.getBeanName()); BeanFactory fa=dbn.getBeanFactory(); Cat cat=(Cat) fa.getBean("cat"); System.out.println(cat.getName()); } }
实现DisposableBean接口执行销毁方法。
被bean中的destory-method属性替代,一般不使用
实现InitializingBean接口执行初始化方法。
被bean的init-method属性替代,一般不使用
BeanFactory对象的几个常用的方法:
boolean containsBean(String):判断指定名称的Bean是否存在
Object getBean(String):返回指定名称的Bean。如果没有,会抛出异常
Object getBean(String,Class):返回指定名称的Bean,并进行类型转换成类对象。两个过程中出错都会异常
boolean isSingleton(String):判断指定名称的Bean是否配置为singleton。没有bean,抛出异常
String[] getAliases(String):获取指定名称bean的所有别名的数组
属性覆盖器
对于一些参数,更实用更简单的方法是使用properties配置,而不是配置在Spring的配置文件中。Spring提供属性替代属性,允许把某些属性配置在properties文件中。
配置PropertyOverrideConfigurer属性覆盖器。
PropertyOverrideConfigure允许把XML配置里的魔偶写参数配置到properties文件中。这些在数据库配置中很常用。配置时需要配置一个PropertyOverrideConfigure对象,指定properties文件的位置,然后把替换的属性用形如${jdbc.url}的字符串替代。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="configproperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <!--<property name="location" value="config.properties"/> 一个properties文件 --> <property name="locations"> <!-- 多个properties文件 --> <list> <value>com/Test/config.properties</value> <value>config1.properties</value> </list> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="properties" ref="configproperties"/> </bean> <bean id="cat" class="com.Model.Cat"> <property name="name" value="${C.name}"></property> <property name="age" value="${C2.age}"></property> </bean> </beans>