2

Spring3.1アプリケーションがあります。そして、私はスプリングインスツルメントのJavaエージェントを持っています、私は設定可能なクラスを持っています:

@Configurable
public class WeavingClass {

    @Resource
    @Getter
    private ApplicationContext ac;

    public WeavingClass()
    {

    }

}

そして、ユニットテストを行います:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={WebBackendContextConfig.class})
@Slf4j
public class TestWeavingInjection extends TestCase {

    @Test
    public void isInjectedTest()
    {
        WeavingClass wc = new WeavingClass();
        assertNotNull(wc.getAc());
    }
}

そして持っている:

@Configuration
@PropertySource(value={"classpath:META-INF/conf/liteicms-backend.properties"})
@ComponentScan(value={"ru.icb.liteicms.backend.service", "ru.icb.liteicms.domain", "ru.icb.liteicms.backend.domain.contentpage.wrappers"})
@EnableSpringConfigured
@EnableLoadTimeWeaving
@EnableAspectJAutoProxy
public class WebBackendContextConfig {

}

-javaagent:org.springframework.instrument-3.1.1.RELEASE.jarを使用してテストを実行します。テストはエラーなしで機能します。

しかし、これを追加すると:

private HashMap<Class<?>, Class<?>> builderMap = new HashMap<Class<?>, Class<?>>()
{
    private static final long serialVersionUID = 1L;
    {
    put(String.class, WeavingClass.class);
    }
};

私のテストは壊れました。

4

1 に答える 1

2

で作成されたオブジェクト (マネージド Bean ではなく)への注入newは、Spring がデフォルトで使用するランタイム プロキシではなく、コンパイル時またはロード時のウィービングでのみ可能です。

を有効にするには、AspectJ ウィーバーの 1 つを構成するか、<context:load-time-weaver>コマンドライン オプションで JVM を起動する必要がありますInstrumentationSavingAgent

Spring ドキュメントの詳細

于 2012-08-01T08:51:15.177 に答える