2

これほど長い間、グーグルで作業していました。様々なstackoverflow投稿にも関わらず、ここで起こっていることについてはまだ困っています。私が欲しいものSpring 3 @Configurable(Mavenを使用)とjar依存関係にあるオブジェクトのコンパイル時に問題が発生しました

まず第一に、:

私は私のWebプロジェクトに依存関係として使用されている永続瓶を持っています。この永続性jarファイル内では、Webプロジェクトのspring configを使ってdaosをうまくセットアップします。 私が今やりたいことは基本クラス(抽象的な)です。Stringにプロパティセットを注入できますが、この抽象クラスを拡張するクラスはSpring経由で直接制御されません(例:新しいMyImp()。

私が収集したすべてから、@ Configfigurableを使用する必要があります。

@Configurable抽象クラスを拡張するオブジェクトへの呼び出しが「ブラックホール」に入るように見えるので、コードはすべて(Mavenでアスペクトプラグインを使用して)コンパイルする必要があります。 - エラーはありません。古いスキルSystem.out.printステートメントを介してシステムにも何も印刷できません。本当に奇妙です。

Webプロジェクト春の設定:上記で使用

<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私は(当然すべてを表示しない)...私は設定のものを持っているかの関連情報だと思う下

Webプロジェクト(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経由で最初にコンパイルされているかもしれませんが(それは、Webプロジェクトに基づいて、後でxlsDirの設定子が何であるかは分かりません)なぜbar()への呼び出しがただ消えてしまうのかは分かりませんが、何かが起こっています。私は春Rooののポンポンがやって見たものに基づいてコンパイルするMavenを設定して、両方のプロジェクトの場合

(それは本当に春に織りMavenの側面のために、このPOMにする必要がどのようなオンラインダウン釘は非常に困難です。)

は、ここで(下記に残っ春のカンガルーのコメント - 彼らは私のものではありません)関連POM情報です:

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

すべてのヘルプははるかに高く評価します。私はすぐにあきらめることを約だとちょうど私の性質は、静的なブロックにファイルとそれを行うことがロード:)

答えて

0

Bean定義他のBean定義で親として使用されていない場合

<bean class="com.foo.MyAbstractClass" abstract="true" scope="prototype"> 
    <property name="xlsDir" value="${xlsDir}"/> 
</bean> 

は何もしません。 @Configurable beanがautowiredになることを望むなら、@Configurable(autowire = Autowire。BY_NAME)を宣言し、name = "xlsDir"という文字列Beanを宣言する

<bean id="xlsDir" class="java.lang.String" factory-method="valueOf"> 
    <constructor-arg value="${xlsDir}"/> 
</bean>