[SPRING] 같은 bean에서 bean을 autowire하는 법
SPRING같은 bean에서 bean을 autowire하는 법
나는 bean A의 인스턴스를 A의 같은 인스턴스에 autowire하고 싶다. XML을 사용하지 않고 annotation을 사용하여 이것을 어떻게 달성 할 수 있는가?
예:
@Service
public class A {
@Autowire
A a;
}
나도 노력했다.
@Service
public class A {
A a;
@Autowired
public void setA(final A a) {
this.a = a;
}
}
하지만 그것도 작동하지 않습니다 : - /
XML을 사용하여 구성
<bean id="a" class="A">
<property name="a" ref="a" />
</bean>
잘 작동합니다. 또한 사용이 가능합니다.
@Service
public class A implements InitializingBean {
A a;
@Autowired
ApplicationContext ctx;
@Override
public void afterPropertiesSet() throws Exception {
a = ctx.getBean(A.class);
}
}
그러나 이것은 성가시다. 이상하게도, XML 설정을 사용할 때 Spring이 처리 할 수 있지만 주석 기반 UI를 사용할 때는 처리 할 수 없다는 것입니다.
해결법
-
==============================
1.@Autowired는 autowire 후보를 찾을 때 주석이 달린 빈을 건너 뛰고 @Resource를 대신 사용합니다.
@Autowired는 autowire 후보를 찾을 때 주석이 달린 빈을 건너 뛰고 @Resource를 대신 사용합니다.
-
==============================
2.나는 그것을 올바르게 이해하고 동일한 클래스의 비 트랜잭션 방식에서 트랜잭션 방식을 호출하기 때문에 거래 조언이 적용되지 않는다는 근본 문제입니까? 트랜잭션 코드를 다른 클래스로 추출 할 수 없습니까? 이게 정말 이상한 구조보다 더 읽기 쉽지 않니?
나는 그것을 올바르게 이해하고 동일한 클래스의 비 트랜잭션 방식에서 트랜잭션 방식을 호출하기 때문에 거래 조언이 적용되지 않는다는 근본 문제입니까? 트랜잭션 코드를 다른 클래스로 추출 할 수 없습니까? 이게 정말 이상한 구조보다 더 읽기 쉽지 않니?
예 :
@Service public class A { @Autowired B b; void doSomething() { b.m(); } } public class B { @Transactional void m() { .. } }
-
==============================
3.Aspectj 컴파일러를 사용하여 컴파일 타임 짜기를 사용할 수 있기 때문에 aspect가 프록시를 작동시킬 필요가 없다. 단지 이것을 pom.xml 설정에 추가하십시오 :
Aspectj 컴파일러를 사용하여 컴파일 타임 짜기를 사용할 수 있기 때문에 aspect가 프록시를 작동시킬 필요가 없다. 단지 이것을 pom.xml 설정에 추가하십시오 :
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> </dependency> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <configuration> <aspectLibraries> <aspectLibrary> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </aspectLibrary> </aspectLibraries> </configuration> </plugin>
from https://stackoverflow.com/questions/17279228/how-to-autowire-bean-in-same-bean by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 최대 절전 모드 ManyToOne FetchType.LAZY가 작동하지 않습니까? (0) | 2019.05.03 |
---|---|
[SPRING] apache POI Excel 통합 문서에 워터 마크 추가 (0) | 2019.05.03 |
[SPRING] 페이스 북을 통한 로그인 후 스프링 보안 설정 쿠키 저장 (0) | 2019.05.03 |
[SPRING] Java Spring 부트 - Tomcat에 배포하지 않는 war 파일 Apache (0) | 2019.05.03 |
[SPRING] Spring에서 JndiObjectFactoryBean을 재정의하고 java에서 암호를 해독하는 방법 (0) | 2019.05.03 |