Spring源码解析(一)——组件注册1

一、@Configuration&@Bean给容器中注册组件

public class Person {
    private String name;
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

配置类

import com.atguigu.gmall.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//配置类==配置文件
@Configuration //告诉spring这是一个配置类
public class MainConfig {

    //给容器注册一个bean;类型为返回值的类型,id默认是用方法名作为id
    @Bean(value = "person01")
    public Person person() {
        return new Person("lisi", 20);
    }
}

测试类

import com.atguigu.gmall.bean.Person;
import com.atguigu.gmall.config.MainConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.stream.Stream;

public class MainTest {
    public static void main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
        Person person = ac.getBean(Person.class);
        System.out.println(person);

        String[] namesForType = ac.getBeanNamesForType(Person.class);
        Stream.of(namesForType).forEach(string -> System.out.println(string));
    }
}

二、@ComponentScan自动扫描组件&指定扫描规则

@Configuration
@ComponentScan(value = "com.ken")
public class MainConfig {
}
public class IocTest {
	@Test
	public void test1() {
		ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
		String[] names = ac.getBeanDefinitionNames();
		Stream.of(names).forEach(str -> System.out.println(str));
	}
}

指定扫描规则

excludeFileters

@Configuration
@ComponentScan(value = "com.ken", excludeFilters = {
		@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})})
public class MainConfig {
}

includeFilters表示只包含,注意,要把useDefaultFilters改成false

@Configuration
@ComponentScan(
		value = "com.ken",
		includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})},
		useDefaultFilters = false)
public class MainConfig {
}

ComponentScans

@Configuration
@ComponentScans(
		value = {
				@ComponentScan(
						value = "com.ken",
						includeFilters = {
								@ComponentScan.Filter(type = FilterType.ANNOTATION, 
										classes = {Controller.class})},
						useDefaultFilters = false)
		})
public class MainConfig {
}

猜你喜欢

转载自blog.csdn.net/csdn_kenneth/article/details/83409587