Getting the ApplicationContext in a spring bean
Here is how to get the ApplicationContext in a spring bean. It can be used to look up other spring beans or search out beans based on their type.
- Implement ApplicationContextAware in your bean and add in a setter and private variable for the ApplicationContext
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringBeanThingy implements ApplicationContextAware { private ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } // Other methods and stuff here }
- Make the bean in your spring config file and spring puts in the appcontext for you
<bean id="appnameSpringBeanThingy" class="org.sakaiproject.appname.spring.SpringBeanThingy" />
- Use the ApplicationContext in your methods to look up spring beans (or do whatever you want), for example:
private List getSpringBeans(String match) { List l = new ArrayList(); String[] beanArray = applicationContext.getBeanDefinitionNames(); for (int j=0; j<beanArray.length; j++) { if (isMatch(beanArray[j], match)) { l.add(beanArray[j]); } } return l; } private boolean isMatch(String beanName, String mappedName) { return (mappedName.equals(beanName)) || (mappedName.endsWith("*") && beanName.startsWith(mappedName.substring(0, mappedName.length() - 1))) || (mappedName.startsWith("*") && beanName.endsWith(mappedName.substring(1, mappedName.length()))); }