我有一个在运行时创建的业务类实例(使用" new")。我想将原始属性值注入此实体。 我不能使用@autowired,因为我不想注入bean,而是原始属性。 我知道,由于这个类没有被Bean Factory本身初始化,我需要某种技巧来注入值。 所以我使用AspectJ: http://docs.spring.io/spring/docs/3.0.0.RC2/reference/html/ch07s08.html
但显然这似乎不适用于我的问题,因为状态: [...]然后Spring将在配置后验证是否已设置所有属性(不是基元或集合)。 [...]
我想避免直接从spring-context请求我的对象。这似乎违反了DI思想。我的意思是重点是不要主动调用某些东西,而是被动地注入所有依赖项,对吗?
那么我可以做些什么才能注入基元?
编辑:或者是因为将除服务bean之外的依赖项注入业务类是不常见的?
答案 0 :(得分:0)
您可以使用applicationContext.getBeanFactory()。resolveEmbeddedValue(" $ {my.property}")
答案 1 :(得分:0)
我不太明白,因为一旦你说你不希望业务对象自动装配或使用getBean,它们就不再受弹簧容器的管理了。
但是你使用AspectJ的想法很好。 Spring和AspectJ可以一起工作,即AOP,但他们没有必要。我相信你可以编写一个Constructor切入点并获得你想要的东西。 This link should help我从来没有做过构造函数的连接点,总是更喜欢注释,但它应该是一个起点。
答案 2 :(得分:0)
也许你应该看一下@Configurable注释:http://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/aop.html#aop-atconfigurable
然后注入一个值,使用@Value,例如:@Value(“$ {some.property:defaultvalue}”)
原始排除似乎不会影响@Value注释。 “最好在字段或方法级别使用@Autowired或@Inject为@Configurable beans指定显式的,注释驱动的依赖注入”并且@Autowired和@Value由同一个beanpostprocessor处理(http://grepcode.com/file/repository.springsource.com/org.springframework/org.springframework.beans/3.2.3/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java )