Время загрузки плетения в Граале - PullRequest
6 голосов
/ 30 августа 2011

Я пытаюсь использовать время загрузки в проекте Grails, чтобы иметь возможность сериализовать и десериализовать объект и автоматически внедрять зависимости пружин. После некоторых поисков я нашел простой пример , и это, кажется, работает как ожидалось. Но после применения той же конфигурации к простому проекту Grails я получаю много ошибок. Например:

[TomcatInstrumentableClassLoader@413a2870] error at org/springframework/web/servlet/theme/AbstractThemeResolver.java::0 class 'org.springframework.web.servlet.theme.AbstractThemeResolver' is already woven and has not been built in reweavable mode

Чтобы проверить это, я создал новый проект grails и изменил applicationContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd">

<context:spring-configured />
<context:load-time-weaver aspectj-weaving="autodetect" weaver-class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/>

В этом файле я также создал новый бин:

<bean class="be.testweaving.Person" scope="prototype">
    <property name="name" value="Timon"/>
</bean>

Это определяет прототип для класса Person и вставляет значение Timon в свойство name.

Я упаковываю это как войну, используя grails war, и развертываю это на сервере Tomcat. У этого кота есть org.springframework.instrument.tomcat-3.0.5.RELEASE.jar в его каталоге lib, и после развертывания я вижу огромный список ошибок, о которых я упоминал выше.

Кто-нибудь смог настроить ткачество времени загрузки в Grails?

1 Ответ

0 голосов
/ 22 августа 2014

Почему бы вам просто не ввести свою собственность через метакласс?

class ExampleBootStrap {
 def init = { servletContext ->
     Person.metaClass.constructor = {  
         def person = BeanUtils.instantiateClass(Person) 
         person.name = "Timon"
         person
     }
 }
}
...