Spring注解,组件扫描跟显式配置bean
package pw.jonwinters; public interface Dessert { public void eat(); }
这里定义了一个接口Dessert
package pw.jonwinters; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component; @Component @Cold @Fruity public class Cookie implements Dessert,BeanPostProcessor { @Override public void eat() { // TODO Auto-generated method stub System.out.println("I am Cookie!"); } @Override public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub System.out.println("Cookie bean has been create!"); return null; } @Override public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub System.out.println("Cookie bean has been create!"); return null; } }
Cookie实现了这个接口,并在创建bean的时候,打印一些字符串
package pw.jonwinters; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component; @Component @Cold @Creamy public class Cake implements Dessert,BeanPostProcessor { @Override public void eat() { // TODO Auto-generated method stub System.out.println("I am Cake!"); } @Override public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub System.out.println("Cake bean has been create!"); return null; } @Override public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub System.out.println("Cake bean has been create!"); return null; } }
Cake实现了接口
package pw.jonwinters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration //@ComponentScan()自己显式配置bean的时候 要关闭组件扫描,否则会出错,Spring in action 第四版上面没有明确说明这一点,请注意 public class DessertConfig { @Bean @Cold @Creamy public Dessert getIceCream() { return new IceCream(); } }
package pw.jonwinters; import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import pw.jonwinters.Dessert; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=DessertConfig.class) @Component public class Eat { Dessert dessert; @Autowired @Cold @Creamy public void setDessert(Dessert dessert) { this.dessert=dessert; } @Test public void testDessert() { assertNotNull(dessert); dessert.eat(); } }
package pw.jonwinters; public class IceCream implements Dessert { @Override public void eat() { // TODO Auto-generated method stub System.out.println("I am Ice!"); } }
总结,开启 显式配置bean的时候 要注意关闭组件自动扫描,否则会运行出错
浙公网安备 33010602011771号