Spring-IOC笔记

    科技2026-02-10  17

    spring中的IOC部分

    理论部分

    什么是IOC 控制反转- (Inversion of Control,缩写为IoC) 把原来new对象的这种方式转换成了,spring通过反射创建对象的方式 spring创建完的对象放到一个容器中,谁需要就给谁注入进去- (获取对象并赋值给引用)

    spring环境搭建

    pom.xml下添加依赖

    <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.6.RELEASE</version> </dependency> </dependencies>

    添加IOC配置文件

    applicationContext.xml

    容器配置类型

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--对应person--> <bean id="person" class="com.yzf.domain.Person"/> <!--对应person2--> <bean id="person2" class="com.yzf.domain.Person"> <property name="id" value="100"></property> </bean> <!--对应person3--> <bean id="date" class="java.util.Date"></bean> <bean id="person3" class="com.yzf.domain.Person"> <constructor-arg name="id" value="20"></constructor-arg> <constructor-arg name="name" value="panghu"></constructor-arg> <constructor-arg name="age" value="12"></constructor-arg> <constructor-arg name="birthday" ref="date"></constructor-arg> </bean> </beans>

    要spring容器创建对象,就在里面配置标签,设置id等参数实现,例如 <bean id="person2" class="com.yzf.domain.Person">中的id值可以随意设,class指的是你要spring帮你创建哪个类的对象的全路径名。

    peson2中一个property标签最后会调一个对应的set方法

    person3中配置构造方法的参数的constructor-arg如果有四个,就表示调的一个四个参数的构造方法。value可以赋上基本类型数据与String,但是其他对象,要使用ref表示在当前容器中查找一个已存在的对象

    IOCTest

    @Test public void test1(){ //1.创建容器对象,给配置文件指定名称 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //2.调用容器的getBean方法获取id对应的对象 // Person person = (Person) context.getBean("person"); Person person2 = context.getBean("person3",Person.class); }

    调用时,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"/>

    IOCTest

    @Test public void test4(){ Person p4 = PersonFactory.getBean(); logger.info(p4+""); }

    为了更直观,类的名字叫xxxFactory

    实例化工厂建对象

    实例工厂:XxxFactory //类中的方法不用加static通过工厂对象调用成员方法获得bean对象:XxxFactory factory = new XxxFactory(); //实例化工厂对象 factory .xxx() //获得对象factory-bean 创建工厂对象 //如果没有则要采用静态static,就变成上面的静态工厂factory-method 调用方法获得bean对象

    Test

    @Test public void test5(){ PersonFactory2 p2 = new PersonFactory2(); Person p22 = p2.getBean2(); logger.info(p22+""); }

    单例和多例

    单例是什么? 内存中只有一个对象,每次获取到该对象的地址值一样. 多实例是什么? 内存中的每个对象都是一个新的对象,他们的地址值都不同.

    单例模式类只能有一个实例 单例模式类必须自己创建自己的唯一实例 单例模式类必须给所有其他对象提供这一实例

    每次获取对象的时候spring返回的对象都是同一个,spring默认的情况下创建的对象都是单例的

    scope="singleton" 单例(默认值) scope="prototype" 多例 scope="request" 创建的对象放到request域中 scope="session" 创建对象放到session对象

    用法:配置文件里 <scope=“xxx”>

    Spring的生命周期

    生命周期: 创建方法init 销毁方法destory 普通方法service

    属性: init-method 当该对象初始化的时候该方法会自动执行 destroy-method 当该对象即将销毁的时候会自动调用该方法

    总结

    要使用springIOC容器

    配置文件applicationContext.xml 2.第一种 ClassPathXmlApplicationContext xxx = new ClassPathXmlApplicationContext("applicationContext.xml") 配置文件里可以改值工厂造对象,静态 或 动态 也是要配置文件
    Processed: 0.015, SQL: 10