Spring

概念

spring是ssm框架中第二个的s,主要包括LocDi

Loc:控制反转 Object把创建对象 对象的生命周期和存储对象(Map)都交给了Spring来管理,自己不在需要创建对象,需要的时候Spring来提供

Di:依赖注入  可以根据对象的关系自动把其他的对象注入,不再需要自己进行get()和set()方法

Loc的实现

先创建一个xml文件,配置包扫描,base-package指定一个包的路径

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--    配置Bean的信息
            id用来作为这个bean的唯一标识,class作为描述了的全路径-->
<!--    <bean id="hello" class="cn.tedu.test.Hello"></bean>-->
<!--    配置包扫描
        base-package指定一个包的路径-->
    <context:component-scan base-package="cn.tedu">

    </context:component-scan>
</beans>

在实现类上加入@Component注解(spring提供的,用来ioc)

Component主要是为了能让xml中的包扫描识别出来这个类,能够让Spring为这个类创建对象

package cn.tedu.ioc;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

@Component//spring提供的,用来ioc
//自动完成IOC->{"user","new User()"},其中key值可以指定
//@Controller//spring提供的,用来ioc
//@Service//spring提供的,用来ioc
public class User {
    public void get(){
        System.out.println("123");
    }
}

创建单元测试方法进行测试

    @Test
    public void get(){
        ClassPathXmlApplicationContext ca1 =
                new ClassPathXmlApplicationContext("spring-config.xml");
        User o2 = (User)ca1.getBean("user");
        System.out.println(o2);
    }

Di的实现

DI的实现建立在Loc的基础之上

非注解的实现

package cn.tedu.day1502;
public class Dept {
    String name="后端开发部门";

    @Override
    public String toString() {
        return "Dept{" +
                "name='" + name + '\'' +
                '}';
    }
}
package cn.tedu.day1502;

public class Emp {
    String name="jack";

    private Dept d;

    public Dept getD() {
        return d;
    }
    public void setD(Dept d) {
        this.d = d;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", d=" + d +
                '}';
    }
}

单元测试方法

    @Test
    public void di(){
        Dept d=new Dept();
        System.out.println(d);//Dept{name='后端开发部门'}
        Emp e = new Emp();
        System.out.println(e);//Emp{name='jack', d=null}
        //di--两个对象的关系依赖注入
        e.setD(d);
        System.out.println(e);//Emp{name='jack', d=Dept{name='后端开发部门'}}
    }

注解形式

package cn.tedu.day1503;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class Student {
    String name="lang";

    @Autowired//di--这个注解就实现了原本的get和set方法
    Teacher t;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", t=" + t +
                '}';
    }
}
package cn.tedu.day1503;
import org.springframework.stereotype.Component;
@Component
public class Teacher {
    String name="lpx";

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

单元测试方法

    @Test
    public void di2(){
        ClassPathXmlApplicationContext spring =
                new ClassPathXmlApplicationContext
                        ("spring-config.xml");
        Student o =(Student) spring.getBean("student");
        System.out.println(o);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值