好几日没有读东西了,今天本来要读mybatis原理部分,但是看到作者讲,只是学会用不用学那么深,遂直接开干spring,工作中一直用springboot,框架都是领导搭好的,每天的任务就是增删改查,挺无脑的。

本周把spring重新拾起,唤醒我的记忆,以前都是跟着视频课吭呲吭呲学过。记得感觉hibernate和sturt2很难,没办法都得学,争取在一个月内搞定。其实最大的敌人是我的记忆力,很多知识记过都忘了,所以我依照樊登所讲,绘制脑图。学完ssm+ssh,向算法进攻。

spring是一个容器,是一个大管家,从前我们需要手动new对象,使用spring后,所以的bean对象统一由大管家管理,我们需要时就向他要,他会把所需要的bean对象主动注入。

spring入门第一步运行起一个最简单demo

spring运行核心的4个jar包

  • spring-beans-4.0.0.RELEASE.jar
  • spring-context-4.0.0.RELEASE.jar
  • spring-core-4.0.0.RELEASE.jar
  • spring-expression-4.0.0.RELEASE.jar
  • commons-logging-1.2.jar 注意这个日志包不是spring中lib所带的,需要独立下载,今天在公司捣鼓项目,就没运行起来,看了别人博客才知道这个也是必须的。

spring生命周期

  • 把实现了BeanPostProcessor接口的Bean,重写接口方法并将Bean加入到配置文件中,可以非常明显的打印两个方法中内容,postProcessBeforeInitialization()在前,postProcessAfterInitialization()在后,书中说这个时候bean就完成了初始化,生存Spring IOC容器之中
  • 所有的Spring IOC容器的最低要求是BeanFactory接口,如果采用了非ApplicationContext子类创建的IOC容器,那么即使Bean实现了ApplicationContextAware接口实现了setApplicationContext()方法也不在生命周期中被调用。

代码演示:

//实现了BeanPostProcessor的类,必须加入xml文件bean中
public class BeanPostProcessorImpl implements BeanPostProcessor { @Override
public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("【"+arg0.getClass().getSimpleName()+"】对象"+"实例化完成");
return arg0;
} @Override
public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("【"+arg0.getClass().getSimpleName()+"】对象"+arg1+"开始实例化");
return arg0;
} }
//sourou形容一杯果汁
public class Source {
private String size;
private String sugar;
private String Fruit;
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getSugar() {
return sugar;
}
public void setSugar(String sugar) {
this.sugar = sugar;
}
public String getFruit() {
return Fruit;
}
public void setFruit(String fruit) {
Fruit = fruit;
}
@Override
public String toString() {
return "Source [size=" + size + ", sugar=" + sugar + ", Fruit=" + Fruit + "]";
}
}
//实现了生命周期中相关的接口的bean
public class JuiceMaker2 implements BeanNameAware,BeanFactoryAware,ApplicationContextAware,InitializingBean,DisposableBean{ public JuiceMaker2() {
System.out.println("hello");
} private String beverageShop = null;
private Source source = null; public String getBeverageShop() {
return beverageShop;
} public void setBeverageShop(String beverageShop) {
this.beverageShop = beverageShop;
} public Source getSource() {
return source;
} public void setSource(Source source) {
this.source = source;
} public String makeJuiec() {
// TODO Auto-generated method stub
String juice = "这是一杯由"+beverageShop+"饮品店,提供的"+source.getSize()+source.getSugar()+source.getFruit();
return juice;
}
public void init() {
System.out.println("【"+this.getClass().getSimpleName()+"】"+"执行自定义初始化方法");
}
public void mydestory() {
// TODO Auto-generated method stub
System.out.println("【"+this.getClass().getSimpleName()+"】"+"执行自定义销毁方法");
}
@Override
public void setBeanName(String arg0) {
System.out.println("【"+this.getClass().getSimpleName()+"】"+"的setBeanName方法");
} @Override
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("【"+this.getClass().getSimpleName()+"】"+"的setBeanFactory方法");
} @Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
System.out.println("【"+this.getClass().getSimpleName()+"】"+"的setApplicationContext方法");
} @Override
public void afterPropertiesSet() throws Exception {
System.out.println("【"+this.getClass().getSimpleName()+"】"+"的afterPropertiesSet方法");
} @Override
public void destroy() throws Exception {
System.out.println("【"+this.getClass().getSimpleName()+"】"+"的destroy方法");
} }
//xml文件
<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="" class="com.houjun.pojo.BeanPostProcessorImpl"></bean>
<bean id="source" class="com.houjun.pojo.Source">
<property name="fruit" value="橙汁"></property>
<property name="sugar" value="少糖"></property>
<property name="size" value="大杯"></property>
</bean>
<bean class="com.houjun.pojo.JuiceMaker2" id="juiceMaker2" init-method="init" destroy-method="mydestory">
<property name="beverageShop" value="贡茶"></property>
<property name="source" ref="source"></property>
</bean>
</beans>
//程序入口
@Test
public void test() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
JuiceMaker2 juice = applicationContext.getBean("juiceMaker2",JuiceMaker2.class);
System.out.println(juice.makeJuiec());
applicationContext.close();
}

Spring入门之生命周期的更多相关文章

  1. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  2. spring bean的生命周期

    掌握好spring bean的生命周期,对spring的扩展大有帮助.  spring bean的生命周期(推荐看)  spring bean的生命周期

  3. Spring Bean的生命周期,《Spring 实战》书中的官方说法

    连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试.这里找到了Spring 实战中的官方说法.希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看 ...

  4. Spring Bean的生命周期相关博客

    最近得面试题一直 问 Spring 得生命周期,鉴于自己还未阅读过源码 所以只能是自己 背一波了.属实不懂硬背得作用,但是无奈被各位面试官打败了.等以后有时间了 一定要阅读几遍spring的 源码 有 ...

  5. Spring学习手札(四)谈谈Spring Bean的生命周期及作用域

    在Spring中,那些组成应用程序的主体以及由Spring IoC容器所管理的对象,被称之为Bean.Bean与应用程序中其他对象(比如自己创建类)的区别就是,Bean是由IoC容器创建于销毁的.在S ...

  6. Spring Bean的生命周期详解(转)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  7. Spring5源码解析-论Spring DispatcherServlet的生命周期

    Spring Web框架架构的主要部分是DispatcherServlet.也就是本文中重点介绍的对象. 在本文的第一部分中,我们将看到基于Spring的DispatcherServlet的主要概念: ...

  8. Spring动态代理及Spring Bean的生命周期

    数组添加值 public class DiTest { /** * 数组 */ private String [] arrays; /** * List:集合 */ private List<I ...

  9. Spring(三)--Spring bean的生命周期

    Spring bean的生命周期 ApplicationContext Bean生命周期流程 1.需要的实体类 ackage com.xdf.bean; import org.springframew ...

随机推荐

  1. spring data jpa 一对多查询

    在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键. pa ...

  2. docker调用yum时“"/usr/libexec/urlgrabber-ext-down" is not installed”

    原因: 1 docker镜像为高版本的fedora30:latest镜像,yum本身已被dnf替代,但部分功能仍不完整: 如:yum-builddep SPECS/xxx.spec 解决办法: 1 安 ...

  3. springCloud的使用06-----分布式配置

    1 分布式配置中心的搭建 1.1 在git仓库中创建配置文件 1.2 创建springboot项目引入相应jar依赖 <project xmlns="http://maven.apac ...

  4. 全局唯一iD的生成 雪花算法详解及其他用法

    一.介绍 雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等. 自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景.GUID:采用无意义字符串,数据量增大时造成 ...

  5. Java8 新增BASE64加解密API

    什么是Base64编码? Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 基于64个字符A-Z,a-z,0-9,+,/ ...

  6. eclipse中创建的spring-boot项目在启动时指定加载那一个配置文件的设置

    步骤如下:鼠标点击项目右键—>Run As—>Run Configurations—>Java Application (如下图) 鼠标右键点击Java Application——— ...

  7. line vty 0 4的意义

    VTY是路由器的远程登陆的虚拟端口,0 4表示可以同时打开5个会话,line vty 0 4是进入VTY端口,对VTY端口进行配置,比如说配置密码,或者ACL. 进入VTY 0 0 好象没什么实际操作 ...

  8. js正则去掉所有html标签/某一特定字符

    java后台 String str=hello你好吗,我很好 thank you????噼安胖胖    "; String reg = "[\ud83c\udc00-\ud ...

  9. Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发接口化框架

    整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLRe ...

  10. kvm搭建

    今日做公司项目时恰好是这个,然后就做一个博客,希望可以帮助到你们 1.把虚拟机zmedu63内存调成6G以上,因为我们要在VMware虚拟中安装KVM,然后在KVM中再安装虚拟机,需要内存大一些.zm ...