spring-framework-reference(5.1.1.RELEASE)中文版——Core部分 (3)

可以,但不推荐,引用文件在父目录使用一个相对"../”路径。这样做会对当前应用程序之外的文件创建依赖关系。特别是,不建议将此引用用于classpath: URLs(例如,classpath:../services.xml),其中运行时解析过程选择“最近的”classpath根目录,然后查看它的父目录。类路径配置更改可能导致选择不同的、不正确的目录。

您总是可以使用完全限定的资源位置而不是相对路径:例如,文件:C:/config/services。xml或者类路径:/配置/ services . xml。但是,请注意,您正在将应用程序的配置耦合到特定的绝对位置。对于这样的绝对位置,通常最好保持间接——例如,通过在运行时针对JVM系统属性解析的“${…}”占位符。

命名空间本身支持import directive特性。在Spring提供的XML名称空间(例如context和util名称空间)中,除了普通bean定义之外,还有其他配置特性。

The Groovy Bean Definition DSL

作为外部化配置元数据的进一步示例,bean定义也可以在Spring的Groovy bean定义DSL中表示,从Grails框架中可以知道这一点。通常,这样的配置位于".groovy"中。结构如下例所示:

beans { dataSource(BasicDataSource) { driverClassName = "org.hsqldb.jdbcDriver" url = "jdbc:hsqldb:mem:grailsDB" username = "sa" password = "" settings = [mynew:"setting"] } sessionFactory(SessionFactory) { dataSource = dataSource } myService(MyService) { nestedBean = { AnotherBean bean -> dataSource = dataSource } } }

这种配置样式基本上与XML bean定义等价,甚至支持Spring的XML配置名称空间。它还允许通过importBeans指令导入XML bean定义文件。

Using the Container

ApplicationContext是一个高级工厂的接口,能够维护不同bean及其依赖项的注册表。通过使用方法T getBean(String name, Class

ApplicationContext允许您读取bean定义并访问它们,如下例所示:

// create and configure beans ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml"); // retrieve configured instance PetStoreService service = context.getBean("petStore", PetStoreService.class); // use configured instance List<String> userList = service.getUsernameList();

使用Groovy配置,bootstrapping看起来非常相似。它有一个不同的context实现类,它支持groovy-aware(但也理解XML bean定义)。下面的示例展示了Groovy配置:

ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");

最灵活的变体是GenericApplicationContext和reader delegate相结合——例如,XmlBeanDefinitionReader用于XML文件,如下示例所示:

GenericApplicationContext context = new GenericApplicationContext(); new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml"); context.refresh();

您还可以为Groovy文件使用GroovyBeanDefinitionReader,如下例所示:

GenericApplicationContext context = new GenericApplicationContext(); new GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy"); context.refresh();

您可以在相同的ApplicationContext上混合并匹配这样的读取器委托,从不同的配置源读取bean定义。

然后,可以使用getBean检索bean的实例。ApplicationContext接口有一些用于检索bean的其他方法,但理想情况下,应用程序代码不应该使用它们。实际上,您的应用程序代码根本不应该调用getBean()方法,因此根本不需要依赖Spring api。例如,Spring与web框架的集成为各种web框架组件(如控制器和jsf管理的bean)提供了依赖注入,允许您通过元数据(如自动连接注释)声明对特定bean的依赖。

Bean Overview

Spring IoC容器管理一个或多个bean。这些bean是使用提供给容器的配置元数据创建的(例如,XML 定义的形式)。

在容器本身中,这些bean定义被表示为BeanDefinition对象,其中包含以下元数据(以及其他信息):

包限定类名:通常是定义的bean的实际实现类。

Bean行为配置元素,它说明Bean在容器中的行为(范围、生命周期回调等等)。

对bean执行其工作所需的其他bean的引用。这些引用也称为协作者或依赖关系。

在新创建的对象中要设置的其他配置设置——例如,池的大小限制或管理连接池的bean中要使用的连接数。

此元数据转换为组成每个bean定义的一组属性。下表描述了这些属性:

Property Explained in...
Class   实例化Bean  
Name   命名Beans  
Scope   Bean生成期  
Contructor arguments   依赖注入  
Properties   依赖注入  
Autowiring mode   自动装配合作者  
Lazy initialization mdoe   初始化回调  
Destruction method   毁坏回调  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdjpw.html