[SPRING] 동적 생성자 값을 갖는 스프링 빈
SPRING동적 생성자 값을 갖는 스프링 빈
생성자 인수없이 완료된 Object를 생성해야합니다. 이 같은
Class A {
private final int timeOut
public A(int timeout)
{
this.timeOut = timeout;
}
//...
}
이 Bean을 스프링 관리하여 나중에 Spring AOP를 사용할 수 있기를 바랍니다.
<bean id="myBean" class="A" singleton="false">
</bean>
그러나 내 bean은 동적 인 값으로 전달되기 위해서 timeout을 필요로한다. 생성자에서 동적 값을 갖는 Spring 관리 bean을 생성하는 방법이 있는가?
해결법
-
==============================
1.BeanFactory는 javadoc에 따라 Bean 정의 자체의 인수를 겹쳐 쓰는 데 사용되는 생성자 인수를 지정할 수있는 getBean (String name, Object ... args) 메소드를 가지고 있습니다. 따라서 beans 파일에 기본값을 넣은 다음 필요할 때 "실제"런타임 값을 지정할 수 있습니다.
BeanFactory는 javadoc에 따라 Bean 정의 자체의 인수를 겹쳐 쓰는 데 사용되는 생성자 인수를 지정할 수있는 getBean (String name, Object ... args) 메소드를 가지고 있습니다. 따라서 beans 파일에 기본값을 넣은 다음 필요할 때 "실제"런타임 값을 지정할 수 있습니다.
<bean id="myBean" class="A" scope="prototype"> <constructor-arg value="0"/> <!-- dummy value --> </bean>
그리고:
getBean("myBean", myTimeoutValue);
나는 나 자신을 시도하지 않았지만 효과가있다.
추신 scope = "prototype"은 더 이상 사용되지 않는 구문 인 singleton = "false"보다 바람직합니다. 더 명백하지만 동일한 작업을 수행합니다.
-
==============================
2.마음에 두 가지 옵션 봄 (아무 말장련 의도) :
마음에 두 가지 옵션 봄 (아무 말장련 의도) :
1. 타임 아웃 팩토리를 생성하고이를 생성자 매개 변수로 사용하십시오. FactoryBean을 구현하는 bean을 생성 할 수 있으며, 다른 bean을 생성하는 것이 그 일이다. 따라서 암호화를 위해 salt를 생성하는 것이 있다면 getObject ()에서 EncryptionSalt 객체를 반환 할 수 있습니다. 귀하의 경우에는 Integer를 생성하려고합니다.
다음은 그 예입니다 : http://www.java2s.com/Code/Java/Spring/SpringFactoryBeanDemo.htm
2. 동적으로 설정된 int를 래핑하는 타임 아웃 빈을 생성하고 "프로토 타입"상태로 둡니다. 매번 생성됩니다. 팩토리 생성의 번거 로움 대신 EncryptionSalt 객체를 프로토 타입 빈으로 선언 할 수 있으므로 삽입 할 때마다 매번 새로운 객체가 생성됩니다. 로직을 생성자 또는 다른 곳에 배치하십시오.
그것은 다소 시간 제한이 실제로 원하는 값에 달려 있습니다.
-
==============================
3.명시 적으로 :
명시 적으로 :
interface Bean { void setTimeout(int timeout); }
class BeanImpl implements Bean { private int timeout; @Override public void setTimeout(int timeout) { this.timeout = timeout; } ... }
<bean id="bean" class="BeanImpl" scope="prototype"> ... <!-- Nothing about timeout here --> ... </bean>
class Client { private Bean bean; public void setBean(Bean bean) { this.bean = bean; } ... public void methodThatUsesBean() { int timeout = calculateTimeout(); bean.setTimeout(timeout); ... } }
from https://stackoverflow.com/questions/8772585/spring-bean-with-dynamic-constructor-value by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 3 MVC AOP 인터셉터를 가진 @Controller? (0) | 2018.12.31 |
---|---|
[SPRING] 선택적으로 Spring 데이터 Rest 응답의 연관을 확장합니다. (0) | 2018.12.31 |
[SPRING] 웹 MVC Spring 애플리케이션의 경우 @Transactional이 컨트롤러 또는 서비스를 사용해야합니까? (0) | 2018.12.31 |
[SPRING] 스프링 mvc 3.0으로 핸들러 인터셉터를 등록하는 방법은 무엇입니까? (0) | 2018.12.31 |
[SPRING] 봄 MVC 샘플 웹 응용 프로그램 (0) | 2018.12.31 |