spring_ioc

本文探讨了Spring框架中的IoC(控制反转)原理,如何通过XML配置减少代码耦合,实现业务层与底层的解耦,以及如何利用Spring的<bean>标签、构造器参数和ApplicationContext来管理对象。
摘要由CSDN通过智能技术生成

ioc

ioc控制反转:把创建对象的权力交给框架,为了削减程序间的耦合(接触代码的依赖关系)
对象由spring进行创建,管理,装配,用户通过操作xml文件来实现不同的操作

maven导spring包
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
             <version>5.0.2.RELEASE</version>
         </dependency>
三层架构

(核心)业务层:功能的实现的模块,对数据的操作,业务成调用持久层

持久层:读取数据库区域

表现层:接受用户的请求和输入数据,提供数据交互的界面

用户的需求 改变,原来的代码就不能满足需求,就要根据具体需求去修改原来的代码,这就破环了程序的完整性。在程序量大时,修改一次的成本就十分昂贵

利用一个set接口实现(主要就是spring在内部调用set方法来获取方法

public class hello {
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    @Override
    public String toString() {
        return "hello{" +
                "str='" + str + '\'' +
                '}';
    }
}

之前:程序时主动创建对象

(ioc的原型)set后:程序就没了主动性,不用管理对象的创建,系统的耦合性大大降低,可以专注于业务层的实现,只需要被动接收就行了(更改一次需求,修改的代码少了)

主动的编程变成被动的接收

<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-3.0.xsd">

<!--    使用spring来创建对象,在spring中这些全是bean
        类型 变量名=new 类型()

        bean标签
            id:等价于变量名
            class:new的对象
        property标签:相当于给对象的属性设置一个值
            name:成员变量名字(利用hello类中的set方法进行注入,所以bean必须实例化)
            value:传入的参数

-->
    <bean id="hello" class="com.pojo.hello">
        <property name="str" value="Spring"/>
    </bean>
</beans>

实现

    public static void main(String[] args) {
//        获取spring上下文对象
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
//        我们的对象全在spring中管理,要使用时,直接进入spring中取出来
        hello hello = (hello)context.getBean("hello");
        System.out.println(hello);
    }

通过使用ApplicationContext来创建BeanFactory的实例,其中包含两个实现类
FileSystemXmlApplicationContext和ClassPathXmlApplicationContext,所以我使用了

        ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("beans.xml");

由于是包含的关系,所以依然可以从配置文件中得到类方法(官方文档建议使用ApplicationContext)

ioc创建对象的方法

user对象:

public class user {
    private String name;

    public  user(String name){
        this.name=name;
    }
    public void show(){
        System.out.println("名字为"+name);
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "user{" +
                "name='" + name + '\'' +
                '}';
    }
}
  1. 默认使用无参构造
  2. 如果使用有参构造的话
    下标赋值
    <bean id="user" class="pojo.user">
        <constructor-arg index="0" value="kobe"/>
    </bean>

根据参数的数据类型进行匹配
(如果构造方法中出现相同的数据类型时就显得很局限了)

    <bean id="user" class="pojo.user">
        <constructor-arg type="java.lang.String" value="kobe"/>
    </bean>

直接使用参数名来进行构造

    <bean id="user" class="pojo.user">
        <constructor-arg name="name" value="kobe"/>
    </bean>

在加载配置文件的同时,容器管理的对象就已经初始化了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值