本文共 3957 字,大约阅读时间需要 13 分钟。
我们平时在创建对象的时候会使用无参构造、有参构造的方式创建。那么我们来看看Spring中怎么处理这两种情况。
创建实体类,并在实体类构造和set方法内部输出测试
package com.muhan.pojo;public class User { private int id; private String name; private int age; public User() { System.out.println("User====无参构造"); } public User(String name) { System.out.println("User====一个参参数的构造"); this.name = name; } public User(String name, int age) { System.out.println("User====两个个参参数的构造"); this.name = name; this.age = age; } public User(int id, String name, int age) { System.out.println("User====三个参参数的构造"); this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { System.out.println("User====setId方法被调用"); this.id = id; } public String getName() { return name; } public void setName(String name) { System.out.println("User====setName方法被调用"); this.name = name; } public int getAge() { return age; } public void setAge(int age) { System.out.println("User====setAge方法被调用"); this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; }}
测试代码:
import com.muhan.pojo.User;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserTest { @Test public void test(){ //获取ClassPathXmlApplicationContext对象,关联spring配置文件applicationContext.xml ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取对象名为user的对象 User user = (User) context.getBean("user"); System.out.println(user); }}
①使用三个参数构造器下标赋值:
测试结果:
②使用两个参数构造器下标赋值:测试结果:
③使用一个参数的构造器下标赋值:测试结果:
④使用无参构造器创建对象:测试结果:
①使用三个参数构造器通过名称注入
测试结果:
②使用两个参数构造器通过名称注入测试结果:
③使用一个参数构造器通过名称注入测试结果:
①使用setter注入一个值:
测试结果:
①使用setter注入两个值:测试结果:
①使用setter注入三个值:测试结果:
(1)注入方式:
(2)注意:
(1)bean
(2)alias
(3)import
在Spring中,那些组成应用程序的主体及由SpringIOC容器所管理的对象,被称之为bean。简单地讲,bean就是由IOC容器初始化、装配及管理的对象。
配置文件中定义 Bean 时,我们不但可以配置 Bean 的属性值以及相互之间的依赖关系,还可以定义 Bean 的作用域 。作用域会对 Bean 的生命周期和创建方式产生影响 。 Bean 的作用域类型:类型 | 说明 |
---|---|
singleton | 在 Spring 容器中仅存在一个 Bean 实例, Bean 以单例的形式存在,默认值。 |
prototype | 每次从容器中调用 Bean 时,都会返回一个新的实例,即相当于执行 new XxxBean() 的实例化操作。 |
request | 每次 http 请求都会创建一个新的 Bean , 仅用于 WebApplicationContext 环境。request.setAttribute("","") |
session | 同一个 http Session 共享一个 Bean ,不同的 http Session 使用不同的 Bean,仅用于 WebApplicationContext 环境。session.setAttribute("","") |
globalSession | 同一个全局 Session 共享一个 bean, 用于 Porlet, 仅用于 WebApplication 环境。application.setAttribute("","") |
Spring 以容器的方式,使得我们仅需配置,即可得到天然的单例模式。
在五种作用域中,request、session和globalSession三种作用域仅在web的应用中使用。
单列模式:该对象再内存中只存在一份
单列模式的实现方式有很多种,但是一般都是使用static关键字,让其成为静态共享资源 单列模式分为饿汉式和懒汉式,饿汉式的意思就是不管你要不要这个对象,我都给你提前创建好,在类加载的时候资源就加载;懒汉式是当需要时再加载。也就是说饿汉式和懒汉式最大的区别就是加载时机不同。 还有一种比较安全的实现方式是使用枚举实现单例模式自动装配(了解)
自动装配的意思是说,当自动装配的属性和引用 的名称一样,可以使用自动装配