Spring框架(二)Spring依赖注入DI、Bean作用域、Bean的自动装配

2021-09-17 04:13

阅读:897

标签:image   扫描   new   utf-8   action   测试结果   执行   oda   instance   Spring依赖注入DI、Bean作用域、Bean的自动装配依赖注入(Dependency Injection,DI) 依赖 : 指Bean对象的创建依赖于容器,Bean对象的依赖资源 注入 : 指Bean对象所依赖的资源,由容器来设置和装配 构造器注入 构造器注入:https://www.cnblogs.com/luoxiao1104/p/14886712.html set注入 (重点) 要求被注入的属性 , 必须有set方法 一、创建实体类 package com.study.pojo; public class Address { private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } package com.study.pojo; import java.util.*; public class Student { private String name; private Address address; private String[] books; private List hobbys; private Map card; private Set games; private String wife; public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String[] getBooks() { return books; } public void setBooks(String[] books) { this.books = books; } public List getHobbys() { return hobbys; } public void setHobbys(List hobbys) { this.hobbys = hobbys; } public Map getCard() { return card; } public void setCard(Map card) { this.card = card; } public Set getGames() { return games; } public void setGames(Set games) { this.games = games; } public String getWife() { return wife; } public void setWife(String wife) { this.wife = wife; } public Properties getInfo() { return info; } public void setInfo(Properties info) { this.info = info; } private Properties info; @Override public String toString() { return "Student{" + "name=‘" + name + ‘\‘‘ + ", address=" + address.toString() + ", books=" + Arrays.toString(books) + ", hobbys=" + hobbys + ", card=" + card + ", games=" + games + ", wife=‘" + wife + ‘\‘‘ + ", info=" + info + ‘}‘; } } 1、常量注入 2、Bean注入 注意:对象是一个引用,ref 3、数组注入 西游记 红楼梦 水浒传 4、List注入 听歌 看电影 爬山 5、Map注入 6、set注入 LOL BOB COC 7、Null注入 8、Properties注入 20190604 男 小明 完整版 红楼梦 西游记 水浒传 三国演义 唱 跳 rep 篮球 LOL COC BOB 456 张三 123456 二、编写测试类 import com.study.pojo.Student; import com.study.pojo.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Student student = context.getBean("student", Student.class); System.out.println(student.toString() ); } 三、打印结果 拓展注入实现 一、编写实体类: 【注意:这里没有有参构造器!】 package com.study.pojo; public class User { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ‘}‘; } } 二、编写spring配置文件【userbeans.xml】 1、P命名空间注入 : 需要在头文件中假如约束文件 **导入约束 : xmlns:p="http://www.springframework.org/schema/p" 2、c 命名空间注入 : 需要在头文件中假如约束文件 **导入约束 : xmlns:c="http://www.springframework.org/schema/c" 三、编写测试类 @Test public void test2(){ ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml"); User user = context.getBean("user2", User.class); System.out.println(user); } 测试结果: Bean的作用域 在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象. 类别 说明 singleton 在Spring IOC容器中仅存在一个Bean实例(单例),Bean以单例方式存在,默认值 prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean时,相当于执行new XxxBean() request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境 seesion 同一个HTTP Session共享一个Bean,不同Session使用不同Bean,仅适用于WebAppcationContext环境 几种作用域中,request、session作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的Spring ApplicationContext环境。 1、Singleton 当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例(单例),并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。 2、 Prototype 当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。 或者 3、Request 当一个bean的作用域为Request,表示在一次HTTP请求中,一个bean定义对应一个实例;即每个HTTP请求都会有各自的bean实例,它们依据某个bean定义创建而成。


评论


亲,登录后才可以留言!