将对象的创建权交于spring,由IOC容器创建和销毁对象,不需要再自己去new对象。
目的:方便解耦,简化开发
一个简单的实际案例:1.创建一个User类
public class User {
public void add(){
System.out.println("add....");
}
}
2.创建XML文件
3.创建测试类
public class Text {
@Test
public void testAdd(){
//加载Spring配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
//获取配置创建对象
User user = context.getBean("user", User.class);
System.out.println(user);
//调用User中的方法
user.add();
}
}
二.spring的XML配置文件
1.Bean标签基本配置
用于配置对象交于spring来创建
默认是调用类中的无参构造函数,如果没有无参构造函数则不能创建成功。
id:Bean实例在spring容器中的唯一标识
class:Bean的全限定名称(即某一类的全类名)
2.Bean标签范围配置scope:指对象的作用范围
| 取值范围 | 说明 |
| singleton | 默认值,单例的(只能创建一个对象) |
| prototype | 多例的(可以创建多个不同对象) |
| request | web项目中,spring创建一个bean对象,将对象存入request域中 |
| session | web项目中,spring创建一个bean对象,将对象存入session域中 |
1)当 scope 的取值为 singleton 时
Bean 的实例化个数:1个
Bean 的实例化时机:当 Spring 核心文件被加时,实例配置的 Bean 实例
对象创建:当应用加载,创建容器时,对象就被创健了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2)当 scope 的取值为 prototype 时
Bean 的实例化个数:多个
Bean 的实例化时机:当调用getBean0方法时实例化 Bean
对象创建:当使用对家时,创健新的对象实例
对象运行:只要对象在使用,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回必
init-method:指定类中的初始化方法名称
destroy-method:指定类中销毁方法名称
public class User {
public void add(){
System.out.println("add....");
}
public void init(){
System.out.println("初始化...");
}
public void destroy(){
System.out.println("销毁中...");
}
}
4.Bean实例化三种方式
1.无参构造方法实例化 (默认,重点掌握)
2.工厂静态方法实例化(了解)
//创建Factory类
public class Factory {
//创建静态方法,返回User类对象
public static User getUser(){
return new User();
}
}
去找Factory类,发现有factory-method="getUser",就找getUser()方法获取到了User对象
3.工厂实例方法实例化(了解)
5.1.Bean依赖注入| 注入方式 | 使用标签 | 属性 |
| set | ref:引用值 value:直接设置值 | |
| 有参构造 |
1.set方式注入
//创建UserServer,在此类中调用User类中的add()方法
public class UserServer {
//通过在XML文件中提前注入User对象的方式
private User user;
//set方法
public void setUser(User user) {
this.user = user;
}
public void add(){
//调用User中的方法
user.add();
}
}
XML中的配置,使用标签
测试类
public class Text {
@Test
public void testAdd(){
//加载Spring配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
//获取配置创建对象
UserServer userServer = context.getBean("userServer", UserServer.class);
//调用UserServer中的方法
userServer.adduser();
}
}
2.有参构造函数注入
public class UserServer {
private int x;
public UserServer(int x) {
this.x = x;
}
}
使用标签
5.2.Bean依赖注入 的数据类型
1.普通数据类型
public class UserServer {
private int y;
private String s;
public void setY(int y) {
this.y = y;
}
public void setS(String s) {
this.s = s;
}
}
2.引用数据类型
3.集合数据类型
public class UserServer {
private List strList;
private Map map;
public void setStrList(List strList) {
this.strList = strList;
}
public void setMap(Map map) {
this.map = map;
}
}
aaa bbb ccc



