1.在Domain對象中獲取Spring applicationContext的方式:mysql
class Book{ def test(){ def applicationContext = domainClass.grailsApplication.mainContext } }
2.在resources.groovy中 使用Spring SpELspring
beans = { bar(Bar) foo(Foo) { name = '#{bar.name}' } } beans = { bar(Bar) foo(Foo) { name = '#{bar.resourceName()}' } }
3.使用 Property Placeholdersql
在grails-app/conf/Config.groovy 中配置app
database.driver="com.mysql.jdbc.Driver" database.dbname="mysql:mydb"
在resources.groovy使用上面配置dom
dataSource(org.springframework.jdbc.datasource.DriverManagerDataSource) { driverClassName = '${database.driver}' url = 'jdbc:${database.dbname}' }
4.運行時依賴注入url
import org.springframework.beans.factory.config.AutowireCapableBeanFactory ... def instance = new XXX(...) def ctx = grailsApplication.mainContext ctx.beanFactory.autowireBeanProperties(instance, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false)
這時候instance 對象的屬性跟 Spring 對應同名 bean 關聯起來spa
5.Bean生命週期配置code
在resources.groovy中component
authenticationManager(com.mycompany.myapp.LdapAuthenticationManager) { bean -> serverUrl = '...' password = '...' bean.initMethod = 'init' bean.destroyMethod = 'destroy' }
或者在實現 InitializingBean、DisposableBean接口server
package com.mycompany.myapp import org.springframework.beans.factory.DisposableBean import org.springframework.beans.factory.InitializingBean class LdapAuthenticationManager implements InitializingBean, DisposableBean { void afterPropertiesSet() { // initialization work } void destroy() { // shutdown work } }
6.Bean 別名
import grails.util.Environment beans = { String realBeanName switch (Environment.current) { case Environment.TEST: realBeanName = 'testCardProcessingService' break case Environment.PRODUCTION: realBeanName = 'productionCardProcessingService' break default: // Environment.DEVELOPMENT, custom envs realBeanName = 'mockCardProcessingService' break } springConfig.addAlias 'cardProcessingService', realBeanName }
7.Resource 依賴注入
普通類
package com.mycompany.myapp import org.springframework.core.io.Resource class FooManager { Resource xmlFile // class methods }
配置
import com.mycompany.myapp.FooManager beans = { fooManager(FooManager) { xmlFile = 'classpath:data.xml' } }
8.在resources.groovy中使用Spring命名空間
xmlns context:"http://www.springframework.org/schema/context" context.'component-scan'('base-package': "my.company.domain")