文章目录


Bean为Spring的最重要没有之一。

1.@Bean的方式

Spring的创建Bean的方式_注解方式_spring

pojo就是简单是一个javabean
Spring的创建Bean的方式_注解方式_spring_02


@Configuration
public class MainConfig {

@Bean("person")//起的别名
public Person person1(){
return new Person("Zjy", 22);
}
}
public class Test02 {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
@Test
public void test1(){
printBeans(context);

}
private void printBeans(AnnotationConfigApplicationContext configApplicationContext){
for (String beanDefinitionName : configApplicationContext.getBeanDefinitionNames()) {
System.out.println(beanDefinitionName);
}
}
}

这里是打印bean的对象
Spring的创建Bean的方式_注解方式_spring_03
这里的bookController是因为在控制器上有一个Controller注解

当然在MainConfig的类的上面可以加上一些扫描器

@ComponentScans(value = {
@ComponentScan(value = "com.Zjy",includeFilters = {
//过滤,通过注解排除,排除的东西是什么
//过滤,包括注解排除,包括的东西是什么,需要加上useDefaultFilter=false,默认为true
@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)
},useDefaultFilters = false)

})

2.@Contoller/@Repository/@Component/@Service

这里的4个注解不解释。因为都是常见的注解

3.@Import

@Configuration
@Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class MainConfig2 {



}

这里的@Import更多的是导入第三方bean。

这里我利用的是{}代表的是导入多个bean,第一个是.class

public class Test02 {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig2.class);
@Test
public void test1(){
printBeans(context);

}
private void printBeans(AnnotationConfigApplicationContext configApplicationContext){
for (String beanDefinitionName : configApplicationContext.getBeanDefinitionNames()) {
System.out.println(beanDefinitionName);
}
}
}

Spring的创建Bean的方式_注解方式_调用方法_04
现在主要看上面的两个,前面的都是Spring自带的bean。

4.ImportSelector

Spring的创建Bean的方式_注解方式_sed_05
这里我是继承了ImportSelecor接口

public class MyImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata annotationMetadata) {

return new String[]{"com.Zjy.bean.Red", "com.Zjy.bean.Blue"};

}
}

返回值就是需要导入的bean,然后通过Import注解导入

Spring的创建Bean的方式_注解方式_spring_06

5.ImportBeanDefinitionRegistrar

Spring的创建Bean的方式_注解方式_spring_07
这里还是通过继承ImportBeanDefinitionRegistrar接口

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
beanDefinitionRegistry.registerBeanDefinition("com.Zjy.bean.Yellow", new RootBeanDefinition(Yellow.class));
}
}

通过调用registerBeanDefinition方法然后注册bean,最后在MainConfig的Import注解中导入bean。

6.FactoryBean

这个是工厂Bean

Spring的创建Bean的方式_注解方式_调用方法_08
通过实现FactoryBean

public class ColorFactoryBean implements FactoryBean {
public Color getObject() throws Exception {
return new Color();
}

public Class getObjectType() {
return Color.class;
}
//是否为单例模式,如果返回为true是,如果是false为多例
public boolean isSingleton() {
return false;
}
}
@Configuration
@Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class MainConfig2 {
@Bean
public ColorFactoryBean colorFactoryBean(){
return new ColorFactoryBean();
}
}

通过调用方法然后创建Bean,这个其实是通过工厂创建的一个Bean

Spring的创建Bean的方式_注解方式_sed_09