«Выкопать его из debug_backtrace ()» не так уж много работы. У debug_backtrace () есть член 'type', который является '::', если вызов статический, и '->', если это не так. Итак:
class MyClass {
public function doStuff() {
if (self::_isStatic()) {
// Do it in static context
} else {
// Do it in object context
}
}
// This method needs to be declared static because it may be called
// in static context.
private static function _isStatic() {
$backtrace = debug_backtrace();
// The 0th call is to _isStatic(), so we need to check the next
// call down the stack.
return $backtrace[1]['type'] == '::';
}
}
Я пытаюсь создать одно приложение с приложением Grails и приложением Spring.
Я пытался внедрить приложение Grails в приложение Spring, но это «невозможно» . Проще внедрить приложение Spring в приложение Grails. Grails знает, что такое Spring, но Spring не имеет представления о том, что такое Grails.
В этой статье вы можете найти полезную информацию о том, как использовать файлы отображения гибернации или аннотации в Grails, так что вы не должны: не нужно все переназначать. Также вы можете использовать все свои классы Java (поместите их в src / java). Вы можете поместить компоненты, определенные в ApplicationContext.xml, в conf / spring / resources.xml. Вы можете оставить их в ApplicationContext, но у меня были проблемы. Я не закончил работу (почти), и все выглядит хорошо.
Я согласен с тем, что создание интерфейса администратора - хорошее упражнение для изучения Grails, а также согласен с предыдущим ответом о том, что Grails сложно, если не невозможно, интегрировать с существующим приложением Spring. Вы, вероятно, могли бы это сделать, но головная боль того не стоит.
Grails построен поверх Hibernate для его ORM, поэтому, если вы уже используете Hibernate с этим приложением Spring, вы можете использовать это в своих интересах. Настроить приложение Grails для использования уже существующих моделей Hibernate не так уж сложно, и это хорошо объясняется в документации Grails.
Поэтому я бы рекомендовал создать консоль администратора как независимое приложение Grails, но использовать Модели Hibernate у вас уже есть, если вы действительно использовали Hibernate.
Было бы трудно «скрыть это», если у существующего приложения не будет правильная структура каталога, которая точно соответствует тому, как это нравится grails - в конце концов, соглашение по конфигурации - это то, где сила grails происходит от.
Вы можете попробовать сделать интерфейс администратора как «отдельное» приложение от исходного / существующего приложения Spring и сопоставить существующую базу данных с объектами домена grails. хотя я не уверен, как бы вы могли легко запустить их бок о бок без дополнительной информации о существующем приложении. Хотя это определенно возможно.