복붙노트

[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. ==============================

    1.RuntimeBeanReference 사용 :

    RuntimeBeanReference 사용 :

    values.addPropertyValue("beanProperty", new RuntimeBeanReference("beanName")); 
    
  2. ==============================

    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. ==============================

    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. ==============================

    4.할 수있는 일 :

    할 수있는 일 :

  5. from https://stackoverflow.com/questions/3370161/how-to-programmatically-create-bean-definition-with-injected-properties by cc-by-sa and MIT license