spring4第6课-bean之间的关系+bean的作用范围

总结:

①bean之间的关系有 1,继承; 2,依赖; 3,引用;

②bean的作用范围(scope)

1,singleton Spring ioc 容器中仅有一个 Bean 实例,Bean 以单例的方式存在;(重点)

2,prototype 每次从容器中调用 Bean 时,都返回一个新的实例;(重点)

3,request 每次 HTTP 请求都会创建一个新的 Bean;

4,session 同一个 HTTP Session 共享一个 Bean;

5,global session 同一个全局 Session 共享一个 Bean,一般用于 Portlet 应用环境;(使用不多)

6,application 同一个 Application 共享一个 Bean;

详解如下:↓↓↓↓↓

①bean之间的关系有 1,继承; 2,依赖; 3,引用;

结合代码看比较好理解

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   
   <bean id="dog" class="com.java1234.entity.Dog">
      <property name="name" value="jack"></property>
   </bean>
   
   <bean id="abstractPeople" class="com.java1234.entity.People" abstract="true"> <!--abstract="true"表示是抽象类-->
      <!--抽象类中可以定义一些公共属性。都是高三5班的-->
      <property name="className" value="高三5班"></property> 
     <!--抽象类中可以定义一些公共属性,大部分人年龄都是19-->
      <property name="age" value="19"></property>     
   </bean>

   <!--开始定义具体的人, parent="abstractPeople" 表示继承关系,zhangsan这个bean继承abstractPeople这个bean-->
<!-- depends-on="autority"表示依赖关系,即在初始化zhangsan之前需要先初始化autority这个bean-->
   <bean id="zhangsan" parent="abstractPeople" depends-on="autority">
      <property name="id" value="1"></property>
      <property name="name" value="张三"></property>
   </bean>
   
   <bean id="lisi" parent="abstractPeople">
      <property name="id" value="2"></property>
      <property name="name" value="李四"></property>
      <property name="age" value="20"></property>  <!--李四的年龄和其他人不一样,age的值可以重写为20-->
      <property name="dog" ref="dog"></property>  <!-- ref="dog"表示引用关系,dog这个属性引用dog这个bean,前面学过,不重复了 -->
   </bean>
    <!-- 定义一个权限类Authority-->
   <bean id="autority" class="com.java1234.service.Authority"></bean>
</beans>

②bean的作用范围(scope)

1,singleton Spring ioc 容器中仅有一个 Bean 实例,Bean 以单例的方式存在;(重点)

2,prototype 每次从容器中调用 Bean 时,都返回一个新的实例;(重点)

3,request 每次 HTTP 请求都会创建一个新的 Bean;

4,session 同一个 HTTP Session 共享一个 Bean;

5,global session 同一个全局 Session 共享一个 Bean,一般用于 Portlet 应用环境;(使用不多)

6,application 同一个 Application 共享一个 Bean;

详解如下:↓↓↓↓↓

代码1:bean.xml 关键字是 scope="singleton" spring的默认值是singleton

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- scope="singleton" 默认是singleton-->
	<bean id="dog" class="com.java1234.entity.Dog" scope="singleton">
		<property name="name" value="jack"></property>
	</bean>
</beans>

代码2: bean类

复制代码
package com.java1234.entity;

public class Dog {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
		
}

代码3:测试类

复制代码
package com.java1234.test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.java1234.entity.Dog;

public class T {

	private ApplicationContext ac;

	@Before
	public void setUp() throws Exception {
		ac=new ClassPathXmlApplicationContext("beans.xml");
	}

	@Test
	public void test1() {
		Dog dog=(Dog)ac.getBean("dog");
		Dog dog2=(Dog)ac.getBean("dog");
		System.out.println(dog==dog2);
	}
	

}

运行结果: bean.xml内容不同,输出结果不同

scope="singleton" 单例模式时,每次都取1个同一个dog对象,所以两次的dog对象相同,输出true

scope="prototype" 多例模式时,每次都会取1个新的dog对象,所以两个dog对象不同,输出false

相关推荐
许彰午21 分钟前
53-审计三表
java·低代码·架构
重生之小比特25 分钟前
【C++进阶】红黑树的实现
java·开发语言·c++
程序猿乐锅30 分钟前
【黑马点评 | 第九篇】秒杀优化-异步实现
java·spring boot·redis·后端·spring·中间件·mybatis
Wx-bishekaifayuan39 分钟前
springboot户外登山社交小程序19787-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·django·课程设计
FYKJ_20102 小时前
springboot助农产品销售商城05829-计算机课程设计、毕业设计
java·spring boot·python·mysql·spark·django
user_admin_god4 小时前
第 10 篇:拼上下文与生成——预算、边界与防幻觉
java·人工智能·spring boot·语言模型
用户3126874877204 小时前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java
天天被压力5 小时前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #02】涨停跌停与特色股池:5类股池接口一次拉全
java·人工智能·python
斯维赤5 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
SimonKing5 小时前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员