# spring 第一天- [ ] ## 1.在maven项目中添加依赖 ```org.springframeworkspring-context5.0.2.RELEASE``` - [ ] ## 2.创建xml文件放在resource下面,配置bean ```?xml version="1.0" encoding="UTF-8"?``` - [ ] ## 3.实例化上下文 ``` ApplicationContext applicationContext = new ClassPathXmlApplicationContext("config.xml"); ``` - [ ] ## 4.getBean等到对象 ``` Student student = (Student) applicationContext.getBean("studentbean"); ``` # name - [ ] 1.分隔符是空格,逗号,分号 - [ ] 2.分隔符能混用 ```------------------------------------------------------------------------- Student stu = (Student) applicationContext.getBean("student"); Student stu1 = (Student) applicationContext.getBean("stu"); Student stu2 = (Student) applicationContext.getBean("stud"); ``` - [ ] 3.多个bean的name配置不能相同 ## 配置的3种方式 - [ ] 1.直接class配置,实例化的是class代表的对象 `````` - [ ] 2.工厂方法:factory-method factory-bean factory-method factory-bean `````` ``` package bean; public class StudentFactory { public static Student getclass(){ return new Student(); } public Student getclass2(){ return new Student(); } } ``` 3.FactoryBean ``` package bean; import org.springframework.beans.factory.FactoryBean; import org.springframework.lang.Nullable; public class TeacherFactoryBean implements FactoryBean{ @Nullable public Teacher getObject() throws Exception { return new Teacher(); } @Nullable public Class?getObjectType() { return Teacher.class; } } ``` # 作用域 Singleton :由容器管理对象的生命周期,也就是说容器存在,对象就创建出来(设定的init方法会执行,容器销毁,管理的对象也会销毁 ``` (设定的销毁方法会执行) ``` Prototype:getBean的临时产生一个,产生之后的对象,spring容器就不管理,由程序自己去管理它的销毁 全局的配置:default-xxxx 调用销毁方法 ``` ((ConfigurableApplicationContext)applicationContext).close(); ``` - [ ] 1、singleton 作用域 当一个bean的 作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把 一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都 将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中 只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时 候,spring的IOC容器中只会存在一个该bean。 配置实例: ```或者``` - [ ] 2、prototype prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。 清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用 bean的后置处理器,该处理器持有要被清除的bean的引用。) 配置实例: ```或者 ```
# 多配置文件
1 import
2 new xxx("","")
验证:每个文件里面配置一个bean
getBean的时候都能得到