欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring学习笔记(二)依赖注入及Bean的作用域

程序员文章站 2022-05-06 20:36:48
...

概念

  • 依赖注入DI(Dependency Injection)
  • 依赖:Bean对象的创建依赖于容器,Bean对象的依赖资源
  • 注入:Bean对象所依赖的资源由容器来设置和装配

最主要的注入方式

依赖注入方式有:构造器注入、Set注入、p命名以及c命名注入,其中Set注入是最常用最主要的注入方式

Set注入

要求被注入的属性必须有set方法,set对于含有复杂类型的类,每种类型的属性注入方法都不同,通常包括的类型有:

bean | list | set | map | props | value | null

Set注入示例

①编写测试类

待引用类Address

 public class Address {
 
     private String address;
 
     public String getAddress() {
         return address;
    }
 
     public void setAddress(String address) {
         this.address = address;
    }
 }

复杂类Student

 public class Student {
 
     private String name; //常量
     private Address address; //引用类型
     private String[] books; //数组
     private List<String> hobbys; //List
     private Map<String,String> card; //Map
     private Set<String> games; //Set
     private String gf; //Null
     private Properties info; //Properties
     
     //自动生成set、get、toString方法

②在配置文件中进行注入

1.常量注入

<bean id="student" class="com.xia.pojo.Student">
     <property name="name" value="张三"/>
 </bean>

2.Bean注入

先配置待引用类,再使用ref引用该配置

<bean id="addr" class="com.xia.pojo.Address">
     <property name="address" value="南京"/>
 </bean>
 
 <bean id="student" class="com.xia.pojo.Student">
     <property name="name" value="张三"/>
     <property name="address" ref="addr"/>
 </bean>

3.数组注入

 <property name="books">
	 <array>
		 <value>笛卡尔</value>
         <value>坏小孩</value>
         <value>日记</value>
     </array>
 </property>

4.List注入

 <property name="hobbies">
     <list>
         <value>爬山</value>
         <value>摄影</value>
         <value>数学</value>
     </list>
 </property>

5.Map注入

 <property name="card">
     <map>
         <entry key="中国银行" value="4561325403212"/>
         <entry key="建设银行" value="7891156144521"/>
     </map>
 </property>

6.Set注入

 <property name="games">
     <set>
         <value>Dota</value>
         <value>WoW</value>
         <value>COC</value>
     </set>
 </property>

7.Null注入

 <property name="gf"><null/></property>

8.Properties注入

 <property name="info">
     <props>
         <prop key="学号">20200714</prop>
         <prop key="性别"></prop>
         <prop key="姓名">张三</prop>
     </props>
 </property>

Bean的作用域

Scope Description
singleton (Default) Scopes a single bean definition to a single object instance for each Spring IoC container.默认设置每个IoC容器中仅存在一个单例方式的Bean对象实例
prototype Scopes a single bean definition to any number of object instances.一个Bean定义多个对象实例。每次从容器中调用Bean时都返回一个新的实例,即每次调用getBean()时都相当于执行一次new XxxBean()
request Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.作用域为HTTP请求的生命周期。每次HTTP请求中都会创建各自的Bean实例
session Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.作用域为一个HTTP Session的生命周期。同一个HTTP Session*享一个Bean,一个Bean定义对应一个实例,不同的Session同的Bean
application Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.作用域为一个ServletContext的生命周期
websocket Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.作用域为一个WebSocket的生命周期

作用域通过关键字scope进行配置。其中request、session、application、websocket仅在基于web的Spring ApplicationContext环境中使用

Singleton

作用域为Singleton单例模式时,一个IoC容器中只存在一个共享的Bean实例对象,该对象在创建容器时默认自动创建,每次通过id请求Bean所获取到的实例对象都是**同一个对象*Spring学习笔记(二)依赖注入及Bean的作用域

<bean id="name" class="com.xia.pojo.Student" scope="singleton">

Prototype

作用域为Prototype原型模式时,一个Bean定义对应多个实例对象,创建容器时不会进行实例化,而是在每次获取Bean时进行创建,所获取的对象不是同一对象Spring学习笔记(二)依赖注入及Bean的作用域

 <bean id="account" class="com.xia.pojo.Student" scope="prototype"/>  

或者

 <bean id="account" class="com.xia.pojo.Student" singleton="false"/>
相关标签: Spring java