ioc-bean注册方式

1. 使用xml配置



    
        
        
    

2.@configuration + @Bean 注解方式
@Configuration
public class UserConfig{
    @Bean("user")
    public User getUser(){
        return new User("张三",18);
    }
}
3.通过扫描包注解componentScan

@componentScan 可以扫描包下的@Controller @Service @Repository @Component注解。

4.使用@import批量导入

当引入外部包时需要导入多个bean时就要使用@import批量导入

@Configuration
@Import(Role.class)
public class UserConfig{
    @Bean(value = "user")
    public user getUser() {
        return new User("张三", 18);
    }
}

@Import在导入Bean的时候,Bean的名称是全类名,如果导入多个类的话,输入格式是这样:

@Import({Role.class,Person.class})

除了使用@import注解还可以是实现importSelector接口或ImportBeanDefinitionRegistrar接口

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.dake.model.User"};
    }

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /**
     * @param annotationMetadata     当前类的注解信息
     * @param beanDefinitionRegistry BeanDefinotion注册类
     */
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        Set annotationTypes = annotationMetadata.getAnnotationTypes();
        System.out.println("注解类:" + annotationTypes);
 
        //判断是容器中是否有User
        boolean definition = beanDefinitionRegistry.containsBeanDefinition("com.dake.modle.User");
        if (definition ){
            RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Role.class);
            //注册Role 类名字为role
            beanDefinitionRegistry.registerBeanDefinition("role", rootBeanDefinition);
        }
    }
}
5.实现FactoryBean接口

注入的为getObject方法返回值

public class MyBeanFactory implements FactoryBean {

    public User getObject() throws Exception {
        return new User();
    }

    public Class getObjectType() {
        return User.class;
    }

    public boolean isSingleton() {
        return true;
    }
}

你可能感兴趣的:(ioc-bean注册方式)