[SPRING] 삽입 된 속성을 사용하여 프로그래밍 방식으로 bean 정의를 작성하는 방법
SPRING삽입 된 속성을 사용하여 프로그래밍 방식으로 bean 정의를 작성하는 방법
프로그래밍 방식으로 bean 정의를 응용 프로그램 컨텍스트에 추가하려고하지만, 그 정의의 일부 특성은 해당 컨텍스트의 다른 bean입니다 (이름을 알고 있습니다). 이러한 속성을 주입 할 수 있도록 어떻게해야합니까?
예 :
GenericBeanDefinition beanDef = new GenericBeanDefinition();
beanDef.setBeanClass(beanClass);
MutablePropertyValues values = new MutablePropertyValues();
values.addPropertyValue("intProperty", 10);
values.addPropertyValue("stringProperty", "Hello, world");
values.addPropertyValue("beanProperty", /* What should be here? */);
beanDef.setPropertyValues(values);
저는 Spring 3.0을 사용하고 있습니다.
해결법
-
==============================
1.RuntimeBeanReference 사용 :
RuntimeBeanReference 사용 :
values.addPropertyValue("beanProperty", new RuntimeBeanReference("beanName"));
-
==============================
2.나는 applicationContext에 접근 할 수있는 이와 같은 빈을 추가 할 것이다 :
나는 applicationContext에 접근 할 수있는 이와 같은 빈을 추가 할 것이다 :
public class AppContextExtendingBean implements ApplicationContextAware{ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{ AutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory(); // do it like this version1(beanFactory); // or like this version2(beanFactory); } // let spring create a new bean and then manipulate it (works only for singleton beans, obviously) private void version1(AutowireCapableBeanFactory beanFactory){ MyObject newBean = (MyObject) beanFactory.createBean(MyObject.class,AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); newBean.setBar("baz"); newBean.setFoo("foo"); newBean.setPhleem("phleem"); beanFactory.initializeBean(newBean, "bean1"); } // create the object manually and then inject it into the spring context private void version2(AutowireCapableBeanFactory beanFactory){ MyObject myObject=new MyObject("foo","phleem"); myObject.setBar("baz"); beanFactory.autowireBean(myObject); beanFactory.initializeBean(myObject, "bean2"); } }
-
==============================
3.해결책을 찾았습니다. 다른 BeanDefinition을 다음과 같이 속성으로 사용해야합니다.
해결책을 찾았습니다. 다른 BeanDefinition을 다음과 같이 속성으로 사용해야합니다.
GenericBeanDefinition bd2 = new GenericBeanDefinition(); bd2.setBeanClass(Dependency.class); GenericBeanDefinition bd1 = new GenericBeanDefinition(); bd1.setBeanClass(Component.class); MutablePropertyValues values = new MutablePropertyValues(); values.addPropertyValue("dependency", bd2); bd1.setPropertyValues(values);
-
==============================
4.할 수있는 일 :
할 수있는 일 :
from https://stackoverflow.com/questions/3370161/how-to-programmatically-create-bean-definition-with-injected-properties by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 서블릿 매핑 url-pattern에서 이중 와일드 카드 (*)는 무엇을 의미합니까? (0) | 2019.01.30 |
---|---|
[SPRING] Spring restful service에서 파일과 JSON 객체로 구성된 다중 요청을 처리하는 방법은 무엇입니까? (0) | 2019.01.30 |
[SPRING] Spring JPA (Hibernate) 유형의 정규 bean이 없다 : javax.persistence.EntityManagerFactory (0) | 2019.01.30 |
[SPRING] 비 스프링 관리 클래스에서 작동하지 않는 스프링 자동 와이어 링 (0) | 2019.01.29 |
[SPRING] Spring 3.0의 다중 특성 파일 (0) | 2019.01.29 |