Spring(004)-Bean装配
一,问题,Bean找不到
代码
@Component public class DemoClass { public int doSth() { return 1; } }
测试代码
@RunWith(SpringJUnit4ClassRunner.class) public class DemoClassTest { @Autowired private DemoClass demoClass; @Test public void doSth() { Assert.assertEquals(1, demoClass.doSth()); } }
虽然DemoClass打了@Component注解,但是在测试代码中@Autowired是找不到到,因为DemoClass是没有被Spring装配到容器中。
Spring把Bean装配到容器主要有以下几种方式
二、通过代码方式
@Configuration注解的方式
新建一个类,增加@Configuration注解
@Configuration @ComponentScan(basePackages = "com.purespring.demo") public class DemoConfiguration { }
这里面还有一个@ComponentScan,这个注解告诉Spring要扫描的包,Spring会通过这个配置把这个包下面的组件全部装配到容器中。
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = DemoConfiguration.class) public class DemoClassTest { @Autowired private DemoClass demoClass; @Test public void doSth() { Assert.assertEquals(1, demoClass.doSth()); } }
测试通过。
@Bean的方式
@Configuration public class DemoConfiguration { @Bean public DemoClass demoClass() { return new DemoClass(); } }
上面代码里面已经移除了@ComponentScan的注解,Spring不会做自动扫描,
@Bean会告诉Spring这个方法会返回一个对象,该对象需要被注册成一个Spring Bean
三、通过XML配置
增加xml配置,命名为demoConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.purespring.demo"></context:component-scan> </beans>
在测试代码中引入配置
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "/demoConfig.xml") public class DemoClassTest { @Autowired private DemoClass demoClass; @Test public void doSth() { Assert.assertEquals(1, demoClass.doSth()); } }
测试通过。
作者:iBrake
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.