在类上的注解,如@Service,@Repository,可以自动被Spring自动检测到该类,并注册bean到ApplicationContext中,即是IoC容器中。
完成类注解的扫描
<?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 http://www.springframework.org/schema/context/spring-context.xsd" > <context:component-scan base-package="com.imooc.beanannotation"> </context:component-scan> </beans>
扫描有哪些类使用类上的注解,把这些类注册到IOC容器中
base-package
扫描这个包下的所有类。
<context:componet -scan>可以扫描类上的注解,并将bean注册到IOC容器中, <context:annotation -config>只能在完成IOC容器之后,扫描类中方法的注解 在使用前者的时候,就不会再使用后者,因为前者已经包含的后者所有的功能。
使用过滤器对自定义注解进行扫描
定义bean
可以显示的定义名字也可以省去,当省去的时候,就相当于类名第一个字母小写
作用域
实例
BeanAnnotation.java
package com.imooc.beanannotation; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; //@Component("bean") @Scope("prototype") @Component public class BeanAnnotation { public void say(String arg) { System.out.println("BeanAnnotation : " + arg); } public void myHashCode() { System.out.println("BeanAnnotation : " + this.hashCode()); } }
测试类
package com.imooc.test.beanannotation; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import com.imooc.beanannotation.BeanAnnotation; import com.imooc.test.base.UnitTestBase; @RunWith(BlockJUnit4ClassRunner.class) public class TestBeanAnnotation extends UnitTestBase { public TestBeanAnnotation() { super("classpath*:spring-beanannotation.xml"); } @Test public void testSay() { BeanAnnotation bean = super.getBean("beanAnnotation"); bean.say("This is test."); bean = super.getBean("bean"); bean.say("This is test."); } @Test public void testScpoe() { BeanAnnotation bean = super.getBean("beanAnnotation"); bean.myHashCode(); bean = super.getBean("beanAnnotation"); bean.myHashCode(); } }