容器中的bean定义是以BeanDefinition对象的形式呈现的。包含如下信息:
-
需要被实例化类的全限定类名
-
bean的作用域以及生命周期回调等
-
bean的依赖
-
其他设置,如连接数,大小限制等
ApplicationContext的实现允许我们自行注册容器之外的对象到容器中。示例代码如下:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext();
applicationContext.getBeanFactory().registerSingleton("dog", new Dog());
可以给bean去别名,bean的name属性可以为bean同时指定多个名字,名字之间用逗号,分或者空格隔开。
<bean id="dog" name="dog1,dog2,dog3" class=""/>
为指定名称的bean定义别名
<alias name="myApp-dataSource" alias="subsystemA-dataSource"/>
<alias name="myApp-dataSource" alias="subsystemB-dataSource"/>
通过静态工厂方法定义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
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
public class DefaultServiceLocator {
private static ClientService clientService = new ClientServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
}
可以指定多个工厂方法
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
<bean id="accountService"
factory-bean="serviceLocator"
factory-method="createAccountServiceInstance"/>
public class DefaultServiceLocator {
private static ClientService clientService = new ClientServiceImpl();
private static AccountService accountService = new AccountServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
public AccountService createAccountServiceInstance() {
return accountService;
}
}
可以通过BeanFactory.getType获取bean的运行时类型
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
applicationContext.getType("dog");