1 24 package org.riotfamily.common.beans.config; 25 26 import java.util.ArrayList ; 27 import java.util.Collections ; 28 29 import org.springframework.beans.factory.BeanFactoryUtils; 30 import org.springframework.beans.factory.FactoryBean; 31 import org.springframework.context.ApplicationContext; 32 import org.springframework.context.ApplicationContextAware; 33 import org.springframework.core.OrderComparator; 34 import org.springframework.core.Ordered; 35 import org.springframework.util.Assert; 36 37 43 public class HighestPrecedenceFactoryBean implements FactoryBean, 44 ApplicationContextAware { 45 46 private Class type; 47 48 private ApplicationContext applicationContext; 49 50 public void setType(Class type) { 51 Assert.isAssignable(Ordered.class, type, "Type must implement the " + 52 "'org.springframework.core.Ordered' interface."); 53 54 this.type = type; 55 } 56 57 public void setApplicationContext(ApplicationContext applicationContext) { 58 this.applicationContext = applicationContext; 59 } 60 61 public Object getObject() throws Exception { 62 Assert.notNull(type, "A type must be specified."); 63 64 ArrayList beans = new ArrayList ( 65 BeanFactoryUtils.beansOfTypeIncludingAncestors( 66 applicationContext, type).values()); 67 68 Assert.notEmpty(beans, "At last one bean of type '" + type.getName() 69 + "' must be present."); 70 71 Collections.sort(beans, new OrderComparator()); 72 return beans.get(0); 73 } 74 75 public Class getObjectType() { 76 return type; 77 } 78 79 public boolean isSingleton() { 80 return true; 81 } 82 83 } 84 | Popular Tags |