一、@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 {
}