DBILITY

spring bean programmatically register to web applicaton context 본문

java/spring

spring bean programmatically register to web applicaton context

DBILITY 2016. 10. 24. 16:46
반응형

제목 그대로 빈을 등록합니다.

2번의 경우 Object만 property setting이 가능하므로, 3번 구현 예가 실제 상황에선 더 적합합니다.

Spring 3.1.1에서 테스트되었으며, cglib dependancy가 필요합니다.

 

  1. controller 예 
    @Controller
    public class TestController {
    
    	private static final Logger LOG = LoggerFactory.getLogger(TestController.class);
    
    	@RequestMapping(value="/test.action")
    	public void dummyMethod(HttpServletRequest request) throws Exception {
    		LOG.debug("{} ----------------------------> {}",getClass(),request);
    	}
    }
  2. 구현 예 1
    @Configuration
    public class beanRegister implements BeanDefinitionRegistryPostProcessor {
    
    	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}
    
    	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
    
    		BeanDefinition beanDefinition = new RootBeanDefinition(TestController.class, Autowire.BY_TYPE.value(), true);
    		beanDefinition.setAttribute("propertyName", ref-object);
    		registry.registerBeanDefinition("testController", beanDefinition);
    	}
    }
  3. 구현 예 2
    @Configuration
    public class beanRegister implements BeanDefinitionRegistryPostProcessor {
    
    	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}
    
    	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
    
    		GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    		beanDefinition.setBeanClass(TestController.class);
    		beanDefinition.setAutowireMode(Autowire.BY_TYPE.value());
    		beanDefinition.setDependencyCheck(1);
    		beanDefinition.setAutowireCandidate(false);
    
    		MutablePropertyValues values = new MutablePropertyValues();
    
    		values.addPropertyValue(new PropertyValue("propertyName", ref-object));
    		values.addPropertyValue(new PropertyValue("propertyName2", "value"));
    
    		beanDefinition.setPropertyValues(values);
    		registry.registerBeanDefinition("testController", beanDefinition);
    	}
    }
  4. mvc dispatcher에 bean을 설정합니다.

 

반응형
Comments