Spring IOC容器的创建

IOC

  • 控制反转:主要是改变了对象的创建方式,由手工创建改为容器管理。
  • DI:依赖注入。由于对象被集中进行创建和初始化,在使用的时候,就需要从容器中进行获取,并装配到对应的类属性中。

IOC容器配置

  1. 基于xml配置的方式:在xml中通过
    标签进行对象的声明。可以采用属性赋值或者使用构造器的方式进行bean声明。

    
        
        
    
    
    
        
        
        
    
  1. 基于java配置类的方式:使用@Configuration、@Bean完成。
@Configuration
public class IocConfiger {
    /**
     * 类似于标签
     *      1、id默认为方法名
     *      2、也可以给@Bean传入value,作为bean名称
     * @return
     */
    @Bean("student-1")
    public Student student(){
        return new Student("张三", 30, "男");
    }

    @Bean
    public Teacher teacher(){
        return new Teacher("李四", 25);
    }
}
  1. 使用包扫描结合注解的方式。可以识别指定路径下带有@Controller、@Service、@Component、@Repository等等,并将其加入到IOC容器中。
  • 在xml配置中使用如下:
 
    
  • 在java配置类中使用如下:
@Configuration
/**
 * 使用包扫描的方式进行bean的创建,可以识别配置路径下的@Controller、@Service、@Component、@Repository......
 */
@ComponentScan(value = "cn.jaylen.beans",
        excludeFilters = {
            @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
        },
        useDefaultFilters = false,
        includeFilters = {
        
        }
)
public class IocConfiger {

    /**
     * 类似于标签
     *      1、id默认为方法名
     *      2、也可以给@Bean传入value,作为bean名称
     * @return
     */
    @Bean("student-1")
    public Student student(){
        return new Student("张三", 30, "男");
    }

    @Bean
    public Teacher teacher(){
        return new Teacher("李四", 25);
    }
}
  • @ComponentScan可以配置一些列的过滤规则
    • excludeFilters:排除对应bean的加载
    • includeFilters:包含指定bean的加载:由于默认扫描该路径下所有bean,如果只想包含部分,需要将默认配置关闭。useDefaultFilters = false

IOC容器的创建

  1. 基于xml配置方式:
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-beans.xml");
        Teacher teacher = applicationContext.getBean(Teacher.class);
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(teacher);
        System.out.println(student);
    }
  1. 基于java配置类的方式
  public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(IocConfiger.class);
        Teacher teacher = applicationContext.getBean(Teacher.class);
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(teacher);
        System.out.println(student);
    }

applicationContext: 是用来操作ioc容器的主要入口,可以从中获取bean的相关信息。

注意

  • 在实际项目中,通常我们都没有手动的进行IOC容器的创建。而是将容器的创建交给了tomcat等web服务器。参见:web.xml加载spring配置文件。
  • 由于springboot中,tomcat已经内置在了项目环境中,所以IOC容器的创建便被隐藏了。

你可能感兴趣的:(学习笔记,spring,IOC)