Spring中bean用法详解

Bean的6种作用域是什么?如何使用? Bean对象在Spring的IOC容器中是重要的资源,那么你知道它的作用域是什么吗?你会使用吗?让我们一起来看看~ 阅读详情

获取bean的方法

1.从ApplicationContex应用上下文容器中获取bean和从bean工厂容器中获取bean

具体案例:

从ApplicationContext中取bean

ApplicationContextac=new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");

当我们去实例化beans.xml,该文件中配置的bean被实例(该bean scope是singleton)从bean中取出 ,如果我们使用beanfactory去获取bean,当你只是实例化该容器, 那么容器的bean不被实例化,只有当你去使用getBean某个bean时,才会实时的创建.

 BeanFactory  factory = new XmlBeanFactory(newClassPathResource("com/hsp/ioc/beans.xml"));

factory.getBean("student");

2.结论

a.如果使用ApplicationContext,则配置的bean如果是 singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)

b.如果是BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)

c.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)

bean 的 配置细节


配置文件

<!-- 配置bean的scope生命周期-->

<bean  id="student"  scope="singleton"  class="com.cloud.ioc.Student">

      <propertyname="name" value="张三"/>

</bean>

测试代码

     //获取两个student

             Students1=(Student) ac.getBean("student");

             Students2=(Student) ac.getBean("student");

             System.out.println(s1+""+s2);

 

这里singleton生命周期理解为:在配置文件中,Student类只配置一个bean,也就只对应一个对象,Student s1=(Student) ac.getBean("student");所以这种方式创建的对象是同一个。

request

session

global-session

是在web开发中才有意义.

种获取ApplicationContext 对象

1.      ClassPathXmlApplicationContext->通过类路径

2.      FileSystemXmlApplicationContext->通过文件路径

举例:

ApplicationContext  ac=newFileSystemXmlApplicationContext("文件路径beans.xml/ applicationContext.xml");

3.      XmlWebApplicationContext

使用Bean基本流程

把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理

1.Bean的建立
      由BeanFactory读取Bean定义文件,并生成各个实例。
2.Setter注入
      执行Bean的属性依赖注入。
3.BeanNameAware的setBeanName()
      如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。
4.BeanFactoryAware的setBeanFactory()
      如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。
5.BeanPostProcessors的processBeforeInitialization()
      容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。
6.InitializingBean的afterPropertiesSet()
      如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。
7.Bean定义文件中定义init-method
      在Bean定义文件中使用“init-method”属性设定方法名称,如下:
<bean id="demoBean" class="com.yangsq.bean.DemoBean"init-method="initMethod">
  .......
 </bean>
      这时会执行initMethod()方法,注意,这个方法是不带参数的。
8.BeanPostProcessors的processAfterInitialization()
      容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。
9.DisposableBean的destroy()
      在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。
10.Bean定义文件中定义destroy-method

     在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

使用案例

1.编写PersonService.java

<span style="font-size:18px;">package com.cloud.beanlife;
import javax.annotation.PreDestroy;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class PersonService implements BeanNameAware,BeanFactoryAware,ApplicationContextAware,InitializingBean{
	public PersonService(){
		System.out.println("对象实例化!");
	}
	public PersonService(String abc){
		System.out.println("对象实例化!");
	}
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		System.out.println("PersonService.setName()方法被调用");
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public void sayhello(){
		System.out.println("hello:"+name+"的年龄是"+age);
	}
	//该方法的arg0表示正在被实例化的bean的id 是多少
	@Override
	public void setBeanName(String arg0) {
		System.out.println("PersonService.setBeanName():"+arg0);
	}
	//该方法传递BeanFactory
	@Override
	public void setBeanFactory(BeanFactory arg0) throws BeansException {
		System.out.println("PersonService.setBeanFactory():"+arg0);
	}
	//该方法可以传递ApplicationContext
	@Override
	public void setApplicationContext(ApplicationContext arg0)
			throws BeansException {
		System.out.println("PersonService.setApplicationContext():"+arg0);
	}
	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("PersonService.afterPropertiesSet()");
	}
	//可以通过注解的方式配置<bean destroy-method="mydestory">销毁方法
	@PreDestroy
	public void mydestroy(){
		System.out.println("生命周期结束,释放各种资源");
	}
}
</span>
2.编写BeanPostProcess.java
<span style="font-size:18px;">package com.cloud.beanlife;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class BeanPostProcess implements BeanPostProcessor{
	@Override
	public Object postProcessAfterInitialization(Object arg0, String arg1)
			throws BeansException {
		System.out.println("postProcessAfterInitialization 函数被调用");
		System.out.println(arg0+"被创建的 时间是"+new java.util.Date());
		return arg0;
	}
	@Override
	public Object postProcessBeforeInitialization(Object arg0, String arg1)
			throws BeansException {
		System.out.println("postProcessBeforeInitialization 函数被调用");
		return arg0;
	}
}
</span>
3.编写配置文件

<span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
	<bean id="personService" destroy-method="mydestroy" class="com.cloud.beanlife.PersonService">
		<property name="name" value="Spring"/>
		<property name="age">
		<value>25</value>
		</property>
	</bean>
	<bean id="personService2" class="com.cloud.beanlife.PersonService">
		<property name="name" value="小明"/>
	</bean>
	<!-- 配置自己的处理器,类似于过滤器 -->
	<bean id="myBeanPostProcessor" class="com.cloud.beanlife.BeanPostProcess">
	</bean>
</beans></span>

4.编写测试文件

<span style="font-size:18px;">package com.cloud.beanlife;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
	/**
	 * 测试大小写字母的转换
	 */
	public static void main(String[] args) {
		ApplicationContext ac= new ClassPathXmlApplicationContext("applicationContext.xml");
		PersonService ps = (PersonService) ac.getBean("personService");
		ps.sayhello();
	}
}</span>
从零搭建:基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台 本文详细介绍了如何从零搭建基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台。通过环境准备、模型部署、接口配置及联合仿真等步骤,帮助用户快速掌握飞行器仿真的核心技术,实现高效的三维可视化与实时数据交互。 阅读详情

相关推荐

neruolib全脑建模计算框架

neurolib 是一个用python编写的全脑建模计算框架,也是可扩展的、允许轻松实现自定义神经质量模型,能够在介观尺度上表示脑区平均活动。

Rootfyx的博客 1147

异常将上下文初始化事件发送到类的侦听器实例_Spring的Bean实例化原理,这一次彻底搞懂了!...

前言之前分析了Spring XML和注解的解析原理,并将其封装为BeanDefinition对象存放到IOC容器中,而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory,接下来就将围绕这这些BeanDefinition对象进行一系列的处理,如BeanDefinitionRegistryPostProcessor对象方法的调用、BeanFactoryPostP...

weixin_39760967的博客 1320

PPL文档——Excel制作的甘特图加上动态今日线

当很多项目需要跟踪进度时,我们介绍一种在Excel中创建甘特图。

qq_34777858的博客 7064

【Spring框架全系列】方法注解@Bean的使用

【Spring框架全系列】方法注解@Bean的使用;

冲击大厂之路!!! 1万+

微信小程序消息推送全攻略:从模板消息到订阅消息的实战避坑指南

本文深入解析微信小程序消息推送机制,对比模板消息、订阅消息与客服消息的核心差异与适用场景。重点提供订阅消息从用户授权设计、前端代码实现到后端稳定发送的完整实战指南,并分享提升消息点击率的文案与运营技巧,帮助开发者构建高效、用户友好的消息推送体系。

b3n4m5q6w7的博客 336

Cursor概述及环境配置

Cursor 是一款基于 AI 的代码编辑器,支持 VS Code 配置迁移和 Java 开发环境配置。主要功能分为 Cursor Settings(AI 相关设置)和 Editor Settings(基础编辑器设置)。用户可通过一键导入或手动方式迁移 VS Code 配置,配置包括主题、扩展和快捷键等。对于 Java 开发,需配置 JDK 和 Maven 路径,并安装 Java 扩展插件以获得完整开发体验,如代码补全、调试和 Maven 项目管理。此外,Cursor 支持汉化配置,用户可安装中文语言包切换

Knight 3550

Spring系列之bean的使用

一、Bean的定义 &lt;bean id="userDao" class="com.dev.spring.simple.MemoryUserDao"/&gt; 这是一个最简单的 Bean 定义。它类似于调用了语句: MemoryUserDao userDao = new MemoryUserDao()。 id属性必须是一个有效的 XML ID,这意味着它在整个 XML 文...

weixin_34029949的博客 289

Hexo博客使用PDF.js

clone了一个pdf.js 然后兴高采烈地到文章里使用{% pdf %}标签 结果浏览器弹出了个下载框(使用GitHub的raw) 不知道是不是因为使用GitHub的原因导致这个问题 后来我测试的时候报了个错 优快云上的解决方法 到时候我再试试把资源放回lib/里面看看行不行 目录1.clone1.1.官方方法1.2.NexT主题方法1.3.补充2.修改文件2.1.修改viewer.htm...

LTFan 961

SpringBean详解

Spring Bean 是 Spring 框架中的核心概念之一,它表示由 Spring 容器管理的对象。Spring Bean 可以是任何 Java 类的实例,包括简单的 JavaBean、业务逻辑对象、数据访问对象、甚至是整合了第三方库或框架的对象。Bean 定义(Bean Definition):Spring Bean 通过 Bean 定义来描述。Bean 定义是一个配置元数据,它包含了创建和配置 Bean 的信息,包括 Bean 的类名、依赖关系、初始化方法、销毁方法等。

刘皇叔说Java的博客 4382

CATIA二次开发一一一装配体与零件之间的坐标转换

输入参数:Product(产品实例对象)、iPointToTransfor(待转换坐标点CATMathPoint)核心逻辑:通过产品对象的绝对位置变换矩阵,计算逆向变换实现坐标系转换。输出参数:Point(转换后的局部坐标点CATMathPoint)

工业软件开发 1129

RT-Thread GD32F4xx HWTIMER驱动

GD32F4xx RT-Thread 硬件定时器驱动调试使用记录

madao1234的博客 1481

探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法

在这篇文章中,我们将深入探讨Spring框架中与Bean存取相关的注解。Spring作为一个强大的IoC(控制反转)容器,提供了多种注解用于标记和管理Bean组件。本文将详细介绍每个注解的用途和使用方法,帮助读者全面了解如何优雅地存取Bean对象。无论是@Component、@Repository、@Service和@Controller等通用注解,还是@Autowired、@Qualifier、@Resource和@Value等依赖注入和属性注入相关注解,都将一一呈现在读者面前。精彩内容,不容错过!

st200112266的博客 2604

基于STM32、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 配置0: 使用内部参考电压(2.5V),增益128,双极性。// 配置通道0: AIN0+和AIN1-,使用配置0和滤波器0。// 100ms采样间隔。// 转换为电压值(使用内部2.5V参考电压)// 构造读命令: 最高位为1表示读,接下来7位是寄存器地址。// 构造写命令: 最高位为0表示写,接下来7位是寄存器地址。// 配置滤波器0: 输出数据率50Hz,后置滤波器4。

corlin6688的博客 528

spring的基本用法:DI和Bean

spring的基本用法:DI和Bean spring的基本用法 关键词:spring介绍;依赖注入DI;设值注入和构造注入; 1.通常项目中各个组件的耦合方式:工厂模式,服务定位器模式; 2.spring介绍【官网:springsource.org】 spring从实际开发的项目中抽取,完成大量开发中的通用步骤;提供一个template的设计哲学。 企业应用开发的轻量级解决

江说江湖专栏:欠世界一个伟大的产品! 885

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring 装配 bean 的 xml 用法

Spring 装配 bean 的 xml 用法 说明 : 本文是介绍装配 bean 时的各种简单配置,讲解的主要是 xml 配置。 Spring 从两个角度来实现自动化装配 组件扫描 : Spring 会自动发现应用上下文中所创建的bean。 自动装配 : Spring 自动满足 bean 之间的依赖。 context:component-scan标签用来配置包扫描器,base-packa...

猪猪代码 415

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring将Java类声明为Spring管理的Bean有哪些注解,各注解的功能、用法与区别

在Spring框架中,Bean管理是一个核心概念。通过注解,我们可以轻松地将Java类声明为Spring管理的Bean,从而简化配置和提高开发效率。本文将详细介绍Spring中几个常用的Bean管理注解,包括@Component@Service和,并探讨它们之间的区别以及真实的使用场景。

yuelangyc的专栏 1434

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

spring factory-bean用法

在spring配置中,单个bean注入到spring容器中很简单,下面说说spring factory-bean的用法。 作为spring 工厂bean,可以通过工厂,反射机制去读取实例化bean,下面是配置文件中的代码: InitFactory.java package com.zyujie.monitor.init; public class InitFac

zyujie的专栏 1825

Spring Bean基础用法

Bean 是 Spring 框架中最核心的两个概念之一(另一个是面向切面编程 AOP)bean的配置方法:XML 文件、注解或者 Java 配置类。@Autowired 是 Spring 提供的注解,@Resource 是 JDK 提供的注解。Autowired 默认的注入方式为byType(根据类型进行匹配),@Resource默认注入方式为 byName(根据名称进行匹配)。

weixin_46117680的博客 1119

Spring中Bean的基本用法

1.引用Bean 如: 2.需指定必定是同个XML下的Bean时,用 3.属性值的注入 XXX txt //或者 使用P模型 xmlns:p="http://www.springframework.org/schema/p" 这样更加简便 4

u013571243的专栏 780

总结 Spring 中存储 Bean 的相关注解以及这些注解的用法.

对于同⼀个类,如何定义多个对象呢?⽐ 如多数据源的场景,类是同⼀个,但是配置不同,指向不同的数据源@Bean@Bean定义了多个对象的话,我们根据类型获取对象,获取的是哪个对象呢?运行结果:报错信息显⽰:期望只有⼀个匹配,结果发现了两个,userInfo,userInfo2.从报错信息中,可以看出来,@Bean注解的bean,bean的名称就是它的⽅法名.接下来我们根据名称来获取bean对象//获取Spring上下⽂对象//@Bean演示Bean的存。

m0_63562631的博客 1171

Spring中bean的scope用法

Spring中bean的scope用法 http://somefuture.iteye.com/blog/2293701

Hi, Sun 140

Spring 管理Bean注入之注解@Component、@Controller、@Service @repository的用法

在接口中我们某个接口的实现类中使用@Autowired注解,被注解的这个类是从Spring容器中取出来的,那调用的实现类也需要被Spring容器管理,我们需要加上@Component注解, 在自动服务,spring初始化的时候,spring会把所有添加@Component注解的类作为使用自动扫描注入配置路径下的备选对象,同时在初始化spring@Autowired,注解相应的Bean时,@Au...

qq_40600507的博客 1988

spring中abstract bean的用法

什么是abstract bean?简单来说,就是在java中的继承时候,所要用到的父类。 案例文件结构: 其中Person类为父类,Student类为子类,其具体类为: package com.test.mySpring; public class Person { public String getName() { return name; } public void

jianghuihong2012的专栏 4474

Spring 中 Bean 的 scope 用法解析

前言: 所谓scope,是指用来声明 IOC 容器中的对象应该处的限定场景或着说是该对象的存货空间;即,在 IOC 容器在对象进入相应的 scope之前,生成并装配这些对象,在该对象不在处于这些 scope 的限定之后,容器通常会销毁这些对象。 1. scope 的分类: 在 Spring 2.0 之前,scope 有 singleton 和 prototype 两种; 而在 Spring 2.0 之后,为支持 web 应用的 ApplicatonCo...

伱糸淂忄 730

spring boot之bean的用法

spring boot中定义bean,方法很多。 一、像spring一样用xml定义。 在resources下写一个xml文件,将相关bean写到xml中去。然后在Application.java中引入这个xml。 @ImportResource({ "classpath*:import.xml"}) public class Application { } 二、利用Configure和Bean这两个注解来定义。 @Configuration public class BeanConfig {

bly1126的专栏 472

Spring基本用法<一>:从Spring起源,bean的创建到IoC/依赖注入

Spring基本用法<一>:从起源到bean的创建基本情况Spring为企业应用开发提供了一个轻量级的解决方案。该解决方案包括:基于依赖注入的核心机制(IoC 控制反转),基于AOP的声明事务管理,与多种持久层耦合,优秀的前端MVC框架.Spring框架的组成结构图:Core Container部分是Spring的核心机制,为必不可少的。其他部分包括:JDBC,ORM,WEB,STRUTS都是可选的

alex_i的博客 581
上一篇: Spring中DI配合接口编程
下一篇: Java面向对象概念
午-夜
博客等级 码龄12年 95粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值