java - 新对象中的 Spring-instrument 和自动注入(inject)

标签 java spring hashmap code-injection

我有 spring 3.1 应用程序。我有 spring-instrument 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);
    }
};

我的测试失败了。

最佳答案

注入(inject)new -创建的对象(而不是托管bean)只能通过编译时或加载时编织来实现,而不能通过Spring默认使用的运行时代理来实现。

您将需要配置 AspectJ 编织器之一 <context:load-time-weaver> ,或使用命令行选项启动 JVM 以启用 InstrumentationSavingAgent .

Details from the Spring documentation

关于java - 新对象中的 Spring-instrument 和自动注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11755152/

相关文章:

java - jackson JSON : get node name from json-tree

java - spring 下载文件 Controller 中重定向的错误处理

spring - 在编译/构建时从 Spring 代码生成 OpenAPI V3 规范

ruby - Hash.new{[]} - 它有什么问题吗?

java - HashMap 填充了 String,而其他 HashMap 未填充

java - 如何将相同的参数从一个 JSP 传递到两个 servlet?然后将不同的参数从servlet传递到同一个JSP?

java - 使 JPanel 看起来与 GridBagLayout 相同

Java 8 HashTable 与 HashMap 冲突处理

java - 如何查看数据库上的所有用户 - JDBC Struts

java - Hibernate 一对多映射正在尝试将映射列更新为空