Grails 技巧 - Grails and Spring

1.在Domain对象中获取Spring applicationContext的方式:

class Book{

    def test(){
        def applicationContext = domainClass.grailsApplication.mainContext
    }
}

2.在resources.groovy中 使用Spring SpEL

beans = {
    bar(Bar)
    foo(Foo) {
        name = '#{bar.name}'
    }
}

beans = {
    bar(Bar)
    foo(Foo) {
        name = '#{bar.resourceName()}'
    }
}

3.使用 Property Placeholder

在grails-app/conf/Config.groovy 中配置

database.driver="com.mysql.jdbc.Driver"
database.dbname="mysql:mydb"

在resources.groovy使用上面配置

dataSource(org.springframework.jdbc.datasource.DriverManagerDataSource) {
    driverClassName = '${database.driver}'
    url = 'jdbc:${database.dbname}'
}

4.运行时依赖注入

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 关联起来

5.Bean生命周期配置

在resources.groovy中

authenticationManager(com.mycompany.myapp.LdapAuthenticationManager) { bean ->
    serverUrl = '...'
    password = '...'
    bean.initMethod = 'init'
    bean.destroyMethod = 'destroy'
}

或者在实现 InitializingBean、DisposableBean接口

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")

转载于:https://my.oschina.net/linghuchong/blog/140053

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值