(快速参考)

365bet地区谷物和春天

4.0.2

365bet地区谷物和春天

365bet地区本部分适用于高级用户以及对365bet地区如何与之集成和构建感兴趣的人。春季框架这对于插件开发人员365bet地区考虑进行运行时配置365bet地区

配置其他Bean

使用Spring Bean DSL

您可以通过在中配置它们来轻松注册新的或覆盖现有的beangrails app conf春季资源groovy365bet地区使用365bet地区春季DSLBean定义在豆子闭包

豆子豆在这里
}

作为一个简单的示例,您可以使用以下语法配置Bean

进口 我的公司MyBeanImpl豆myBean MyBeanImpl someProperty42其他财产"蓝色"
    }
}

365bet地区配置完成后,可以将Bean自动连接到365bet地区工件和其他支持依赖项注入的类中。BootStrap常规在这种情况下,通过声明一个名称为您的bean名称的公共字段来进行集成测试myBean):

 ExampleController {

     定义myBean

使用DSL的优点是您可以混合bean声明和逻辑,例如基于环境:

进口 免费环境
进口 我的公司模拟MockImpl
进口 我的公司MyBeanImpl豆子开关环境电流案件生产环境myBean MyBeanImpl someProperty42其他财产"蓝色"
            }
            打破

        案件环境开发myBean MockImpl someProperty42其他财产"蓝色"
            }
            打破
    }
}

365bet地区应用可以使用应用365bet地区变量,可用于访问365bet地区配置等

进口 免费环境
进口 我的公司模拟MockImpl
进口 我的公司MyBeanImpl豆子如果应用程序配置我公司的mockService myBean MockImpl someProperty42其他财产"蓝色"
        }
    } 其他myBean MyBeanImpl someProperty42其他财产"蓝色"
        }
    }
}
如果您在其中定义一个bean资源槽365bet地区与先前由365bet地区注册的名称相同或已安装插件的名称相同,您的bean将替换先前的注册。这是一种自定义行为的简便方法,而无需诉诸于编辑插件代码或其他会影响可维护性的方法

使用XML

Bean也可以使用grails应用程序conf春季资源xml365bet地区在较早版本的365bet地区中,此文件是由您自动生成的运行应用脚本,但DSL在资源槽现在是首选方法,因此现在不会自动生成,但是仍然支持您只需要自己创建它

该文件是典型的Spring XML文件,Spring文档中有一个优秀的参考关于如何配置Spring Bean

myBean我们使用DSL配置的Bean将在XML文件中使用此语法进行配置

<> ID="myBean" ="我的公司MyBeanImpl">
    <> 那么="someProperty" ="42" />
    <> 那么="其他财产" ="蓝色" />

像其他bean一样,它可以自动连接到任何支持依赖项注入的类中

 ExampleController {

     定义myBean

引用现有的Bean

声明的豆资源槽要么资源xml可以按照约定引用其他bean,例如,如果您有一个图书服务该类的Spring bean名称将是bookService所以您的bean会在DSL中像这样引用它

豆myBean MyBeanImpl someProperty42其他财产"蓝色"bookService参考"bookService")
    }
}

或类似的XML

<> ID="myBean" ="我的公司MyBeanImpl">
    <> 那么="someProperty" ="42" />
    <> 那么="其他财产" ="蓝色" />
    <> 那么="bookService" 参考="bookService" />

该bean需要一个公共setter作为bean的引用,还需要在Groovy中定义的两个简单属性,如下所示:

我的公司 MyBeanImpl {
    整数someProperty其他属性BookService bookService或只是def bookService
}

或像这样的Java

我的公司 MyBeanImpl {

    私人的BookService bookService私人的 整数someProperty私人的 其他财产上市 虚空setBookService BookService theBookService这个bookService theBookService上市 虚空setSomeProperty整数someProperty这个someProperty someProperty上市 虚空setOtherProperty其他财产这个其他财产其他财产

使用参考XML或DSL中的XML是非常强大的,因为它配置了运行时引用,因此被引用的Bean不必存在,只要在最终应用程序上下文配置发生时它就位,就可以正确解决所有问题。

有关可用bean的完整参考,请参见参考指南中的插件参考。

Bean DSL的运行时Spring

365bet地区365bet地区中的这个Bean构建器旨在提供一种简化的将依赖项连接在一起的方式,该方式以Spring为核心

365bet地区另外,Spring通过XML和注释进行配置的常规方法是静态的,并且在运行时很难修改和配置,而编程性XML创建则容易出错且冗长。BeanBuilder的通过在运行时以编程方式将组件连接在一起,从而改变了所有这些情况,从而使您能够根据系统属性或环境变量来调整逻辑

这使代码能够适应其环境,并避免了不必要的重复代码,这些代码具有不同的Spring配置用于测试开发和生产环境

BeanBuilder类

365bet地区提供了365bet地区 Spring BeanBuilder使用动态Groovy构造bean定义的类基础知识如下

进口 组织apache commons dbcp BasicDataSource
进口 org grails orm休眠ConfigurableLocalSessionFactoryBean
进口 org springframework上下文ApplicationContext
进口 365bet地区 Spring BeanBuilder

定义bbBeanBuilder BB豆dataSource BasicDataSource driverClassName"org h驱动程序"网址"jdbc h mem grailsDB"用户名"她的"密码""sessionFactory ConfigurableLocalSessionFactoryBean数据源引用'数据源'hibernate属性"休眠hbm ddl自动": "创建放置",
                               "休眠显示SQL":     "真正"ApplicationContext appContext bb createApplicationContext
外挂程式grails app conf春季资源groovy您不需要创建新实例的文件BeanBuilder的相反,DSL可以在doWithSpring豆子分别块

本示例说明了如何使用具有以下功能的数据源配置Hibernate:BeanBuilder的

这种情况下的每个方法调用数据源sessionFactory在Spring中,调用将映射到bean的名称。该方法的第一个参数是bean的类,而最后一个参数是一个块。在块体内,您可以使用标准Groovy语法在bean上设置属性

可以使用Bean的名称自动解析Bean引用。在上例中,通过sessionFactory豆解决数据源参考

生成器还可以设置与bean管理相关的某些特殊属性,如以下代码所示

sessionFactory ConfigurableLocalSessionFactoryBean bean自动装配行为另一个选项是byType>豆自动线'借名'
    将初始化方法设置为init init方法bean的init方法'在里面'
    设置销毁方法销毁销毁方法豆类破坏方法'破坏'
    设置bean的范围>豆范围'请求'数据源参考'数据源'hibernate属性"休眠hbm ddl自动": "创建放置",
                           "休眠显示SQL":     "真正"]
}

方括号中的字符串是Spring的XML定义中等效bean属性的名称。

在Spring MVC中使用BeanBuilder

包括格莱斯春天类路径中的文件以在常规Spring MVC应用程序中使用BeanBuilder,然后添加以下内容您的价值观BEB INF beb公里文件


    contextConfigLocation
    WEB INF applicationContext groovy



    contextClass
    365bet地区grails Web servlet上下文365bet地区WebApplicationContext

然后创建一个WEB INF applicationContext groovy其余的文件

进口 组织apache commons dbcp BasicDataSourcebean数据源BasicDataSource driverClassName"org h驱动程序"网址"jdbc h mem grailsDB"用户名"她的"密码""
    }
}

从文件系统加载Bean定义

您可以使用BeanBuilder的类,以加载使用此处定义的相同路径匹配语法定义Bean的外部Groovy脚本,例如

定义bbBeanBuilder bb loadBeans"类路径SpringBeans groovy")

定义applicationContext bb createApplicationContext

在这里BeanBuilder的将所有Groovy文件加载到以.s结尾的类路径上SpringBeans常规并将其解析为bean定义下面是一个示例脚本

进口 组织apache commons dbcp BasicDataSource
进口 org grails orm休眠ConfigurableLocalSessionFactoryBeanbean数据源BasicDataSource driverClassName"org h驱动程序"网址"jdbc h mem grailsDB"用户名"她的"密码""sessionFactory ConfigurableLocalSessionFactoryBean数据源数据源hibernateProperties"休眠hbm ddl自动": "创建放置",
                               "休眠显示SQL":     "真正"]
    }
}

将变量添加到绑定上下文

如果从脚本重新加载bean,则可以通过创建Groovy来设置要使用的绑定捆绑:

定义捆绑 捆绑绑定maxSize10000绑定产品组'金融'

定义bbBeanBuilder bb绑定绑定bb loadBeans"类路径SpringBeans groovy")

定义ctx bb createApplicationContext

然后您可以访问maxSize产品组DSL文件中的属性

BeanBuilder DSL说明

使用构造函数参数

可以使用每个bean定义方法的参数来定义构造函数参数。将它们放在Class的第一个参数之后

bb bean exampleBean MyExampleBean"firstArgument", 2someProperty1, 2, 3]
    }
}

此配置对应于MyExampleBean与一个看起来像这样的构造函数

MyExampleBean整型酒吧

使用工厂方法配置BeanDefinition

闭包的第一个参数是对Bean配置实例的引用,您可以使用该实例配置工厂方法并在该实例上调用任何方法。AbstractBean定义

bb bean exampleBean MyExampleBean bean bean bean工厂方法"getInstance"豆单身someProperty1, 2, 3]
    }
}

或者,您也可以使用bean定义方法的返回值来配置bean

bb豆定义示例exampleBean MyExampleBean someProperty1, 2, 3示例factoryMethod"getInstance"
}

使用工厂bean

Spring定义了工厂bean的概念,通常不是直接从Class的新实例中创建而是从这些工厂之一创建bean。在这种情况下,bean没有Class参数,而必须将工厂bean的名称传递给bean定义方法

bb bean myFactory ExampleFactoryBean someProperty1, 2, 3myBean myFactory名称"等等"
    }
}

另一种常见方法是提供要在工厂bean上调用的工厂方法的名称,这可以使用Groovy的命名参数语法来完成。

bb bean myFactory ExampleFactoryBean someProperty1, 2, 3myBeanmyFactory: "getInstance"那么"等等"
    }
}

在这里getInstance上的方法ExampleFactoryBeanbean将被调用来创建myBean豆角,扁豆

在运行时创建Bean引用

有时直到运行时才知道要创建的Bean的名称。在这种情况下,可以使用字符串插值来动态调用Bean定义方法

定义女人名字""bb豆"${女人名字}豆角,扁豆"MyExampleBean someProperty1, 2, 3]
    }
}

在这种情况下女人名字调用bean定义方法时使用先前定义的变量。该示例具有硬编码的值,但与基于配置系统属性等以编程方式生成的名称一起使用时,也可以正常工作。

此外,由于有时Bean名称直到运行时才知道,因此在这种情况下,使用参考方法

定义女人名字""bb豆"${女人名字}豆角,扁豆"MyExampleBean someProperty1, 2, 3anotherBean AnotherBean示例参考"${女人名字}豆角,扁豆")
    }
}

这里的示例属性AnotherBean使用运行时引用来设置exampleBean参考方法也可以用来从父级引用beanApplicationContext在构造函数中提供的BeanBuilder的:

ApplicationContext父级//
定义bbBeanBuilder父bb Bean anotherBean AnotherBean示例参考"${女人名字}豆角,扁豆", 真正)
    }
}

这里第二个参数真正指定引用将在父上下文中查找Bean

使用匿名内豆

您可以通过将bean的属性设置为带有参数的块来使用匿名内部bean,该参数为bean类型

bb beans marge人名"保证金"丈夫人p名"荷马"年龄45道具超重: 真正, 高度: ""儿童参考'巴特'参考'附件'巴特人名"巴特"年龄11丽莎人名"新增"年龄9
    }
}

在上面的示例中,我们将保证金bean的丈夫属性到创建内部bean引用的块中;或者,如果您有工厂bean,则可以省略类型,而只需使用指定的bean定义来设置工厂

bb beans personFactory PersonFactory marge人名"保证金"老公豆豆工厂"personFactory"豆工厂方法"newInstance"那么"荷马"年龄45道具超重: 真正, 高度: ""儿童参考'巴特'参考'附件')]
    }
}

抽象Bean和父Bean定义

要创建抽象bean定义,请定义一个没有参数

 圣杯任务 {
    定义 开始打印"让我们开始" }
}
 圆桌骑士 {

    那么领袖HolyGrailQuest任务KnightRoundTable那么这个名字定义 embarkOnQuest任务开始
进口 365bet地区 Spring BeanBuilder

定义bbBeanBuilder BB豆abstractBean领导者"兰斯洛"
    }
    ...
}

在这里,我们定义了一个具有领导值为的属性兰斯洛要使用抽象bean,请将其设置为子bean的父对象

bb豆任务HolyGrailQuest骑士KnightOfTheRoundTable"卡米洛特"Bean Bean父abstractBean任务ref'寻求')
    }
}
使用父bean时,必须先设置bean的父属性,然后再设置bean上的任何其他属性。

如果您想要一个具有指定您可以这样做

进口 365bet地区 Spring BeanBuilder

定义bbBeanBuilder BB豆abstractBean KnightOfTheRoundTable豆Bean'抽象' = 真正领导"兰斯洛"任务HolyGrailQuest骑士"卡米洛特"bean bean父对象abstractBean任务quest

在这个例子中,我们创建一个类型为抽象的bean圆桌骑士并使用bean参数将其设置为抽象。稍后,我们定义一个没有定义但继承来自父bean

使用Spring命名空间

由于Spring的Spring用户可以更轻松地通过XML名称空间访问关键功能,因此可以通过以下语法在BeanBuilder中使用Spring名称空间来声明它:

xmlns语境:"http www springframework组织架构上下文"

然后调用与Spring名称空间标签名称及其关联属性匹配的方法

语境'组件扫描'('基本包装': "我的公司域名")

您可以使用Spring命名空间执行一些有用的操作,例如查找JNDI资源

xmlnsJEE:"http www springframework组织架构jee"JEE'jndi查找'(ID: "数据源", 'jndi名称': "java comp env myDataSource")

这个例子将创建一个带有标识符的Spring bean数据源通过在给定的JNDI名称上执行JNDI查找,使用Spring命名空间,您还可以从BeanBuilder完全访问Spring中所有强大的AOP支持。例如,给定这两个类

  {

    整型年龄那么虚空生日年龄
 生日贺卡发件人 {

    清单人民发卡[]

    虚空生日人人人发卡人

您可以定义一个方面,该方面使用切入点检测何时生日方法被称为

xmlns哎呀:"http www springframework组织架构aop"姓名"弗雷德"年龄45BirthdayCardSenderAspect BirthdayCardSender aop配置"代理目标类别": 真正方面ID: "sendBirthdayCard", 参考: "BirthdayCardSenderAspect"方法: "生日",
            切入点: "处决作废人生日和这个人"
        }
    }
}

属性占位符配置

365bet地区365bet地区通过Spring的扩展版本支持属性占位符配置的概念PropertyPlaceholderConfigurer.

在其中定义的设置ConfigSlurper脚本或Java属性文件可用作Spring配置中的占位符值grails应用程序conf春季资源xmlgrails app conf春季资源groovy例如,给定以下条目grails应用配置会议应用程序或外部配置

数据库驱动程序"com mysql jdbc驱动程序"数据库dbname"mysql mydb"

然后,您可以在中指定占位符资源xml使用熟悉的语法如下

<> ID="数据源"
      ="org springframework jdbc数据源DriverManagerDataSource">
    <> 那么="driverClassName">
        数据库驱动程序
    
    <> 那么="">
        jdbc数据库dbname
    
 

在中指定占位符资源槽您需要使用单引号

dataSource组织springframework jdbc数据源DriverManagerDataSource driverClassName'数据库驱动程序'网址'jdbc数据库dbname'
}

这会将属性值设置为文字字符串,稍后由Spring的PropertyPlaceholderConfigurer根据配置解析

一个更好的选择资源槽是通过访问属性grails应用变量

dataSource org springframework jdbc datasource DriverManagerDataSource driverClassName grailsApplication配置数据库驱动程序URL"数据库\:${grailsApplication配置数据库dbname}"
}

使用这种方法将保持配置中定义的类型

属性覆盖配置

365bet地区365bet地区支持通过以下方式设置bean属性组态.

您定义一个豆子用bean的名称和它们的值来阻止

豆bookService webServiceURL"http www亚马逊com"
    }
}

通用格式为

<>.<> = <>

Java属性文件中的相同配置为

豆bookService webServiceURLhttp:www.amazon.com

弹簧靴执行器

Spring Boot执行器端点允许您监视和与应用程序交互Spring Boot包含许多内置端点,例如健康端点提供基本的应用程序运行状况信息

365bet地区由于365bet地区,这些端点默认为禁用

您可以在yml应用程序如下

grails应用配置会议应用yml
管理:
  :
    默认启用: 真正