I would like to autowire instance of bean A to the same instance of A. How can I achieve this with annotation (without XML).
Example:
@Service
public class A {
@Autowire
A a;
}
I also tried
@Service
public class A {
A a;
@Autowired
public void setA(final A a) {
this.a = a;
}
}
but it is not working too :-/
Configuration using XML like
<bean id="a" class="A">
<property name="a" ref="a" />
</bean>
works fine. And also it's possible to use
@Service
public class A implements InitializingBean {
A a;
@Autowired
ApplicationContext ctx;
@Override
public void afterPropertiesSet() throws Exception {
a = ctx.getBean(A.class);
}
}
but this is cumbersome. The strange thing is, that Spring can handle this when using XML configuration, but not when using annotation-based one.
You can use compile-time weaving (with Aspectj compiler) so aspects do not need proxy to work. Just add this into your pom.xml configuration:
@Autowired
skip the annotated bean when looking for autowire candidates, use@Resource
instead.Do I understand it right, and is your root problem the fact that your Transactional advice is not applied because you call a transactional method from within a non-transactional method in the same class? Can't you just extract the transactional code into another class? Isn't that more readable than this imho really weird construct?
Eg.