Spring bean的定义和作用域的注解实现

spring自动检测注解

在类上的注解,如@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

定义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();
	}
	
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部