什么是IOC 控制反转- (Inversion of Control,缩写为IoC) 把原来new对象的这种方式转换成了,spring通过反射创建对象的方式 spring创建完的对象放到一个容器中,谁需要就给谁注入进去- (获取对象并赋值给引用)
pom.xml下添加依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.6.RELEASE</version> </dependency> </dependencies>要spring容器创建对象,就在里面配置标签,设置id等参数实现,例如 <bean id="person2" class="com.yzf.domain.Person">中的id值可以随意设,class指的是你要spring帮你创建哪个类的对象的全路径名。
peson2中一个property标签最后会调一个对应的set方法
person3中配置构造方法的参数的constructor-arg如果有四个,就表示调的一个四个参数的构造方法。value可以赋上基本类型数据与String,但是其他对象,要使用ref表示在当前容器中查找一个已存在的对象
调用时,context.getBean("person3",Person.class);中的’person3’对应id,必写的,Person.class是结果的类型也可以不写让内部帮你转型(Person) context.getBean("person");
虽然对象名是peson2,但context.getBean里面写的是person3,所以是person3方式创建对象 日志结果:
什么是静态工厂:XxxFactory.get(); 通过调用静态方法获取bean对象
com\yzf\domain\IocPerson.java
public class PersonFactory { public static Person getBean(){ return new Person(); } }applicationContext.xml
<!-- Person person1 = PersonFactory.getBean();--> <bean class="com.yzf.demo.PersonFactory" factory-method="getBean" id="person4"/>为了更直观,类的名字叫xxxFactory
单例是什么? 内存中只有一个对象,每次获取到该对象的地址值一样. 多实例是什么? 内存中的每个对象都是一个新的对象,他们的地址值都不同.
单例模式类只能有一个实例 单例模式类必须自己创建自己的唯一实例 单例模式类必须给所有其他对象提供这一实例
每次获取对象的时候spring返回的对象都是同一个,spring默认的情况下创建的对象都是单例的
scope="singleton" 单例(默认值) scope="prototype" 多例 scope="request" 创建的对象放到request域中 scope="session" 创建对象放到session对象用法:配置文件里 <scope=“xxx”>
生命周期: 创建方法init 销毁方法destory 普通方法service
属性: init-method 当该对象初始化的时候该方法会自动执行 destroy-method 当该对象即将销毁的时候会自动调用该方法
要使用springIOC容器
配置文件applicationContext.xml 2.第一种 ClassPathXmlApplicationContext xxx = new ClassPathXmlApplicationContext("applicationContext.xml") 配置文件里可以改值工厂造对象,静态 或 动态 也是要配置文件