Spring ioc入门

spring ioc原理

控制反转大概的流程如下:
在这里插入图片描述
为了解耦合,需要创建工厂类。
创建对象之后,创建xml配置文件,然后使用dom4j解析配置文件
再使用反射创建一个对象


spring ioc简单的例子

在这之前需要导入jar包。如果创建spring的项目,IDE会自动导入这些jar包
在这里插入图片描述

  1. 首先创建一个User类
package cn.itcast.ioc;

public class User {
     public void add(){
         System.out.println("add........");
     }
}
  1. 创建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">
    <!--ioc入门-->
    <bean id="user" class="cn.itcast.ioc.User"></bean>

</beans>

spring的对象都叫做bean
beans标签里面的内容是schema约束,编译器会自动生成,如果不能自动生成,那么可以复制过去。
后面的bean标签里面id是标识,后面的class里面是对应的类的完整路径
这样使用xml最大的好处就是:如果类名变化,或者类的路径变化,那么直接更改配置文件即可。
3. 使用ioc创建对象

package cn.itcast.ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestIOC {
    @Test
    public void testUser(){
        //1 加载spring配置文件,根据配置创建对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        //2 得到配置文件对象
        User user = (User) context.getBean("user");
        System.out.println(user);
        user.add();
    }
}

运行单元测试可以看到结果:
可以看到输出了对象的地址
以及调用了对象的add方法。
在这里插入图片描述


Spring bean管理(xml方式)

bean实例化的方式

1.使用类的无参数构造创建(常用)

方式在前面已经说过。
比如之前说的这个就是直接调用类里面的无参数构造器(没有写,默认)

<bean id="user" class="cn.itcast.ioc.User"></bean>

如果类里面有有参构造,那么使用上面这个方法无法创建类

2. 使用静态工厂创建

在类里面创建静态方法,返回对象
首先创建一个类

package cn.itcast.bean;

public class Bean2 {
    public void add(){
        System.out.println("add.....");
    }
}

然后创建一个静态的工厂方法

package cn.itcast.bean;

public class Bean2Factory {
    //静态方法,返回bean2对象
    public static Bean2  getBean2(){
        return new Bean2();
    }
}

在这里插入图片描述
最后在xml里面调用工厂方法

<bean id="bean2" class="cn.itcast.bean.Bean2Factory" factory-method="getBean2"></bean>

与无参数构造创建不同的是,这个里面多了一个factory-method,也就是调用工厂类里面的静态工厂方法。
测试:

package cn.itcast.bean;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIOC {
    @Test
    public void testUser(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
        Bean2 bean2 = (Bean2) context.getBean("bean2");
        System.out.println(bean2);
        bean2.add();
    }
}

测试结果:
在这里插入图片描述

3. 使用实例工厂创建

将静态方法变为普通方法
使用factory-bean和factory-method来进行bean的管理
在这里插入图片描述

那么使用context.getBean(“bean3”)之后,返回的就是Bean3的对象。

在真正的开发中,一般使用第一种方法实现,使用无参构造。


Bean标签常用的属性

1. id属性

不能包含特殊的符号

2. class属性

所在对象类的全路径

3. name属性

功能和id属性是一样的。
id的属性值里面不能包含特殊符号,但是name里面是可以有特殊符号
一般不用

3. scope属性

singleton默认值表示单例(对象只创建一次)
prototype:每次都会创建一个对象
request: 创建对象并放到request域里面
session:对象放在session域里面
globalSession:对象放在globalSession里面,登录一次之后所有的页面直接操作

@Test
    public void testUser(){
        //1 加载spring配置文件,根据配置创建对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean1.xml");

        //2 得到配置文件对象
        User user1 = (User) context.getBean("user");
        User user2 = (User) context.getBean("user");
        System.out.println(user1);
        System.out.println(user2);
    }

在这里插入图片描述
可以看到,创建的两个对象地址是一样的, 因此是单例模式

加上多例模式之后,可以看到:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值