Гуглил и работал над этим слишком долго. Перебирал также и другие сообщения от stackoverflow, но все же был озадачен тем, что здесь происходит.
Прежде всего, что я хочу:
У меня есть постоянный фляга, которая используется в качестве зависимости в моем веб-проекте. В этом банке персистентности даос настроен просто отлично, используя конфигурацию Spring из веб-проекта. То, что я хочу сделать сейчас, это базовый класс (абстрактный). Я хочу иметь возможность внедрить набор свойств в строку, но классы, расширяющие этот абстрактный класс, напрямую не контролируются через Spring (например, создается с помощью нового MyImp ().)
Из всего, что я собираю, мне нужно будет использовать @ Configurable .
Странно то, что код все компилируется (с Maven, использующим плагин аспектов), и я думаю, что должно происходить некоторое переплетение, потому что вызовы объектов, расширяющих абстрактный класс @Configurable, похоже, попадают в «черную дыру» - никаких ошибок пока ничего не может быть напечатано в системе через старые инструкции skool System.out.print ??? Действительно странно.
Ниже, я думаю, приведена соответствующая информация о том, как у меня все настроено ... (очевидно, не все показывает):
Конфигурация пружины веб-проекта:
<util:properties id="props" location="classpath:application.properties"/>
<context:annotation-config />
<context:spring-configured/>
<context:component-scan base-package="com.foo" />
<bean class="com.foo.MyAbstractClass" abstract="true" scope="prototype">
<property name="xlsDir" value="${xlsDir}"/>
</bean>
//some DAOs are injected with datasources..not shown. Props being set just fine for the
//datasources from application.properties, and the DAOs will work fine
Jar, используемый вышеупомянутым веб-проектом (который содержит MyAbstractClass и его потомков), не имеет никакого XML. Различные файлы расширяют MyAbstractClass и создаются в приложении с помощью нового:
MyImp imp = new MyImp ();
imp.bar ();
MyAbstractClass соответствующая информация:
@Configurable
public abstract class MyAbstractClass {
private String xlsDir;
public void setXlsDir(String xlsDir) {
this.xlsDir = xlsDir;
}
public void bar() {
System.out.println("this won't even get printed, yet no errors!");
System.out.println("xlsDir is "+xlsDir);
}
}
Я могу поиграться с @Autowiring позже и с помощью @Value (это то, что я впервые попробовал в любом случае), но сейчас я даже не уверен, что ткачество работает правильно. Может быть, проблема в том, что jar-файл персистентности сначала компилируется через maven (с ткачеством) - но пока он не знает, что такое установщик для xlsDir, на основе веб-проекта? Однако это не объясняет, почему вызовы bar () просто исчезают, поэтому что-то происходит.
Для обоих проектов я настроил maven для компиляции на основе того, что я видел, когда Pom Spring Roo делал (в Интернете очень сложно найти то, что нужно в этом pom для ткачества maven с пружиной.)
Вот соответствующая информация о помпе (комментарии оставленной весной руо ниже - они не мои):
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.2</version> <!-- NB: do use 1.3 or 1.3.x due to MASPECTJ-90 - wait for 1.4 -->
<dependencies>
<!-- NB: You must use Maven 2.0.9 or above or these are ignored (see
MNG-2972) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
Любая помощь высоко ценится. Я собираюсь скоро сдаться и просто загрузить свой файл свойств в статический блок и покончим с этим :)