java JSP开发之Spring中Bean的使用

发布时间 - 2026-01-11 02:39:53    点击率:

java JSP开发之Spring中Bean的使用

在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后bean就可以被使用了,一旦该bean不再使用,Java就自动进行垃圾回收。然而,在Spring中,bean的生命周期就比较复杂了。下面是一个bean装载到Spring应用上下文的过程:

  如图所示:在你准备调用bean之前,bean工厂执行了若干启动步骤:

      1.Spring对bean进行实例化;

      2.Spring将值和bean的引用注入到bean对应的属性中;

      3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;

      4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;

      5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;

      6.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法;

      7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用initmethod声明了初始化方法,该方法也会被调用;

      8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法;

      9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;

      10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。

一,创建可以被发现的Bean

  在厨师的眼中,一套好的刀是必不可少的,它能够将平淡的食物素材加工成精致的艺术品。

 package cooking;
 
 public interface knife{
 
   void cut();
 }

  现在,我们创建一个名为knife(刀)的接口,它拥有cut(切)的功能。接下来我们实现这个接口

package cooking

  @Component
public class beef implements knife{

 private int weight = 2;
 private double price = 32.1;

 public void cut(){
  System.out.println(“This is perfect beef”,+“weight:”+weight
+“kg”+“,”+“It's price is”+price+"$");
  }    
}

  请注意,我们在beef类上使用了@Component注解。这个简单的注解表明 该类是一个组件类,并告诉Spring要为这个类创建bean。

  在默认情况下,组件扫描是不启用的,我们需要显示配置一下Spring,命令Spring去寻找带有@Component注解的类,并为其创建bean

package cooking

@Configuration
@ComponentScan
public class knifeConfig{

  
}

  注意到,在knifeConfig类上加上了@ComponentScan注解,该注解能够在Spring中开启组件扫描,如果没有其他配置的话,@ComponentScan默认会扫描与配置类相同的包,去查找带有@Component的注解类,并在Spring中自动为其创建一个bean。如果你更倾向于使用XML来启用组件扫描的话,那么可以使用Spring context命名空间的<context:component-scan>元素。

<context:component-scan base-package="cooking"/> 该标签会开启组件扫描,去cooking包下寻找带有@Component的注解类。

以上就是Spring中Bean的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Spring  # Bean  # Spring中Bean的使用方法  # 深入解析Java的Spring框架中bean的依赖注入  # Spring装配Bean之用Java代码安装配置bean详解  # 详解Spring Boot 使用Java代码创建Bean并注册到Spring中  # Java类获取Spring中bean的5种方式  # Java Spring循环依赖原理与bean的生命周期图文案例详解  # 实现了  # 是一个  # 也会  # 为其  # 使用了  # 创建一个  # 上了  # 如有  # 并在  # 希望能  # 注意到  # 很简单  # 如果没有  # 请注意  # 可以使用  # 谢谢大家  # 要为  # 必不可少  # 倾向于  # 你更 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel怎么实现模型属性的自动加密  高端智能建站公司优选:品牌定制与SEO优化一站式服务  微信小程序 require机制详解及实例代码  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  想要更高端的建设网站,这些原则一定要坚持!  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  js实现获取鼠标当前的位置  JavaScript如何实现继承_有哪些常用方法  如何基于云服务器快速搭建个人网站?  5种Android数据存储方式汇总  如何快速搭建高效服务器建站系统?  高防服务器:AI智能防御DDoS攻击与数据安全保障  JS弹性运动实现方法分析  如何自定义建站之星网站的导航菜单样式?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  ,交易猫的商品怎么发布到网站上去?  Laravel storage目录权限问题_Laravel文件写入权限设置  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel怎么上传文件_Laravel图片上传及存储配置  黑客入侵网站服务器的常见手法有哪些?  html如何与html链接_实现多个HTML页面互相链接【互相】  如何在云指建站中生成FTP站点?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  ,怎么在广州志愿者网站注册?  详解Huffman编码算法之Java实现  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何用腾讯建站主机快速创建免费网站?  高性价比服务器租赁——企业级配置与24小时运维服务  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  JS经典正则表达式笔试题汇总  Laravel集合Collection怎么用_Laravel集合常用函数详解  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  如何在景安服务器上快速搭建个人网站?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel如何使用Livewire构建动态组件?(入门代码)  iOS发送验证码倒计时应用  高端建站三要素:定制模板、企业官网与响应式设计优化  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?