概念
spring是ssm框架中第二个的s,主要包括Loc和Di
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);
}