IOC:控制反转,从容器的角度考虑,spring容器控制资源,并给到别的应用程序资源。
DI:依赖注入,从应用程序的角度考虑,它是被IOC容器注入资源的,这也就叫依赖注入。
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器来注入
- set注入
- 构造器注入
主要是注入引用数据类型
1、将要注入的到别的地方的类注册到spring容器当中
2、将要被注入的类注册到spring容器当中,并且这个类中要有成员变量,然后又set方法
3、在要被注入的类的bean中注册property属性,然后name=set的名字开头小写,id就是这个要注册到别的地方的这个类的id
应用场景:业务层需要使用dao层的方法,传统的做法就是创建对象,在spring中就不一样了,是把这两个类都注册到spring中,然后给一个成员变量和set,接着把这个类的id和成员的name写进去。
UserDao
package com.zhu.dao;
public interface UserDao {
public void add();
}
UserDaoImpl
package com.zhu.dao;
public class UserDaoImpl implements UserDao{
private String name;
public void add() {
System.out.println("这个添加方法运行了...");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
UserService
package com.zhu.service;
public interface UserService {
public void add();
}
UserServiceImpl
package com.zhu.service;
import com.zhu.dao.UserDao;
public class UserServiceImpl implements UserService{
//这里业务层要调用dao层的类,以前是直接创建对象使用,这里使用spring容器的set注入
private UserDao userDao;
private int num;
@Override
public void add() {
System.out.println("service 跑起来了");
userDao.add();
System.out.println(num);
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setNum(int num) {
this.num = num;
}
}
applicationContext.xml
Test
package com.zhu.test;
import com.zhu.dao.UserDaoImpl;
import com.zhu.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//2、加载spring容器
ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
//3、从spring容器中获取bean资源,获取到的也就是这个类的对象
UserServiceImpl userService = (UserServiceImpl) context.getBean("userService");
userService.add();
}
}
2、构造器注入(了解)
构造器注入和set注入类似
name:适用于任何时候(最好用)
type:适用于类型不一样的时候(几乎用不到)
index:根据下标给属性设置值(鸡肋)如果定义好了之后,再往构造方法里面加值,整个坐标就会被打乱,所以说这个属性很垃圾,别用!!!!
3、集合注入
简单,就像注入属性一样。
6、p命名空间(了解) 7、springEL表达式(了解)
name age 1111 2 root 123456
使用EL表达式:ref就可以改成value了
value="#{userDao}"
了解即可,没啥用
8、外部properties文件jdbc的外部文件
命名空间这里需要修改很多
9、import导入配置文件
原因:好几个人同时维护一个spring容器,会出现很多问题
解决:使用主和副配置文件解决,一个文件是主文件,后面的副文件都挂在主文件上面
- spring容器也可以加载多个配置文件(了解,不会写)
了解即可
11、第三方bean的配置方式


