当前位置: 首页 > news >正文

应该符合建设网站wordpress 文章 分类

应该符合建设网站,wordpress 文章 分类,三丰云服务器,电商网站开发 文献综述目录 1.Bean的生命周期 1.1、概括 1.2、图解 2、代码示例 2.1、初始化代码 2.2、初始化的前置方法和后置方法(重写) 2.3、Spring启动类 2.4、执行结果 2.5、经典面试问题 3.总结 1.Bean的生命周期 1.1、概括 Spring中Bean的生命周期就是Bean在…

目录

1.Bean的生命周期

1.1、概括

1.2、图解

2、代码示例

2.1、初始化代码

2.2、初始化的前置方法和后置方法(重写)

2.3、Spring启动类

2.4、执行结果

2.5、经典面试问题

3.总结


1.Bean的生命周期


1.1、概括

Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程,主要分为以下5个部分:

1.实例化:给Bean分配内存空间(对应JVM中的“加载”,这里只是分配了内存);

2.设置属性:进行Bean的注入和装配;

3.初始化:

        a) 执行各种通知;

        b) 执行初始化的前置工作;

        c) 进行初始化工作(使用注解 @PostConstruct 初始化 或者 使用(xml)init-method 初始化, 前者技术比后者技术先进~);

        d) 执行初始化的后置工作;

4.使用Bean;

5.销毁Bean。

值得注意的是:实例化和初始化是两个完全不同的过程,前者只是给Bean分配内存空间,而后者则是将程序执行权从系统级别转到用户级别,执行用户添加的业务代码。

1.2、图解

下图以买房、盖房、入住、卖房为栗子,方便理解~

2、代码示例


2.1、初始化代码

以下,我将在Spring中,演示Bean的生命周期:

创建一个类,名为BeanLifeComponent(这个名字是自定义的), 写下初始化的各类操作:

import org.springframework.beans.factory.BeanNameAware;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;@Component
public class BeanLifeComponent implements BeanNameAware {//执行各种通知@Overridepublic void setBeanName(String s) {System.out.println("执行了通知");}//初始化的前置和后置方法不能写在这个Bean中!//执行初始化方法(注解)@PostConstructpublic void postConstruct() {System.out.println("通过注解 @PostConstruct 执行了初始化方法");}//使用public void useBean() {System.out.println("使用Bean");}//销毁@PreDestroypublic void preDestory() {System.out.println("执行了销毁方法");}}

注意:1.这里不能写出实例化过程,因为给Bean分配内存对应JVM类加载过程;2.当前这个Bean中不能写初始化的前置方法和后置方法,否则不会执行,因为初始化的前置方法和后置方法是需要继承BeanPostProcessor接口,重写两个方法实现的, 并且是为所有 Bean 服务的,而非为某一个 Bean 服务的,若写在一个某一个Bean中,则不会执行。

2.2、初始化的前置方法和后置方法(重写)

另外再创建一个类(避免在一个Bean中),自定义名为 MyBeanPostProcessor ,接着继承BeanPostProcessor接口,重写初始化的前置方法和后置方法,如下代码:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;@Component
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("执行了初始化的前置方法");return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("执行了初始化的后置方法");return bean;}
}

2.3、Spring启动类

最后在Spring启动类中获取Bean对象,如下代码:

import com.demo3.component.BeanLifeComponent;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App3 {public static void main(String[] args) {ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");//获取BeanBeanLifeComponent beanLifeComponent =context.getBean("beanLifeComponent", BeanLifeComponent.class);//使用BeanbeanLifeComponent.useBean();//销毁Beancontext.destroy();}
}

为什么这里不使用 ApplicationContext 而是使用它的子类 ClassPathXmlApplicationContext 呢?因为 ClassPathXmlApplicationContext 中有destroy销毁方法(用来销毁容器,容器销毁了,Bean自然就没了),而ApplicationContext 中没有这个销毁方法,演示的时候,就体现不出来了。

2.4、执行结果

从执行结果来看,符合咱们预期~

2.5、经典面试问题

        那么是否可以先执行 初始化 再执行 设置属性 呢? 不可以!想象一下,如果在初始化的方法中要用你设置的属性,就会引发空指针异常,如下代码:

@Controller
public class StudentController {//属性注入@Autowiredprivate Student student;//初始化@PostConstructpublic void init() {student.setName("周杰伦");}}

如果你先执行了初始化 init() 方法,而 init() 方法中需要使用属性注入后得到的Student对象,那么此时还没有注入就进行修改,就会引发空指针异常。
 

3.总结


Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程。

主要就是由:1.实例化、2.设置属性:进行Bean的注入和装配、3.初始化、4.使用Bean、5.销毁Bean,这五步构成,并且任何顺序都不可以随意调换。

Bean的执行流程属于常见面试题,一定要在理解的基础上牢记!


 

http://www.yayakq.cn/news/549376/

相关文章:

  • 为什么最近好多网站打不开了手机网站 代码格式
  • php商城网站开发实例视频教程西安个人做网站
  • 企业做网站的目的是什么湖南高端建设网站
  • 网站怎样做银联支付潍坊市住房和城乡建设局网站下载
  • 漂亮大气的装潢室内设计网站模板 单页式html5网页模板包厦门编程培训机构
  • 整站优化深圳wordpress 播放大视频播放
  • 湖南建设网站获客系统工信部域名备案查询
  • 商务网站内容维护范围嘉兴网站设计
  • 网站缺陷和优化的例子泗水县建设局的网站怎么打开
  • 网站修改了关键词被降权网站建设要学什么
  • wap网站建设如何改造熊掌号宁波网站建设优化排名
  • 上海集酷网站建站平台与自己做网站
  • 中国建设银行福州招聘信息网站网站建设公司有哪些
  • 东莞市网站建设分站公司艺术字体转换器在线转换器
  • 大足网站设计专业的移动网站建设公
  • 华大网站建设百度为什么会k网站
  • 网页设计接私单的网站怎么样让网站做的大气
  • 重庆大型网站建设重庆网站制作怎么在网站上添加qq
  • 产品网站建设设计方案如何获取网站是哪个公司制作
  • 金融企业网站php源码如何查询网站开发
  • 杨浦专业网站建设上海营销型网站报价
  • 南宁有多少家网站建设推广的公司郑州seo培训
  • 西安专业做网站的公司有哪些wordpress登记打印
  • php做的商城网站必备功能网站建设的文件
  • 要搭建网站合肥营销型网站建设公司
  • dns看国外网站wordpress 子主题目录
  • 中国空间站拒绝10国名单做网站服务器空间
  • 建站行业乱象完整版泰州建设工程信息网
  • 企业网站设计与实现做服装要看国外哪些网站好
  • 织梦搭建商城网站浏览器网站有哪些