<bean name="userBean" class="com.nuts.demo.spring.UserBean">
<property name="username" value="张三"/>
</bean>

1、BeanFactory:低级容器,也是其他容器的父类,能完成基本的Bean加载工作

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("src/main/resources/bean.xml")); 
UserBean userBean = (UserBean) factory.getBean("userBean");
System.out.println(JSON.toJSONString(userBean));

2、ApplicationContext :高级容器,继承自BeanFactory,被常使用的实现类有:FileSystemXmlAPplicationContext、WebXmlApplicationContext、ClassPathXmlApplicationContext

//通过Bean工厂新建Bean
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
UserBean userBean = (UserBean) context.getBean("userBean");
System.out.println(JSON.toJSONString(userBean));

通过注解的方式加载BEAN

@Data
public class UserBean2 implements InitializingBean,DisposableBean{
private String username; private int age; @Override
public void afterPropertiesSet() throws Exception {
System.out.println("属性设置完成了:"+this.getUsername());
} @Override
public void destroy() throws Exception {
System.out.println("对象被销毁:"+this.getUsername());
} //Bean的初始化方法
public void init(){
System.out.println("初始化完成了");
}
}
@Configuration
public class Config {
@Bean(initMethod = "init")
public UserBean2 userBean2(){
UserBean2 userBean2 = new UserBean2();
userBean2.setAge(1);
return userBean2;
}
}
    public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
UserBean2 userBean2 = context.getBean(UserBean2.class);
System.out.println(JSON.toJSONString(userBean2));
}

3、创建Bean的几种方式:XML文件、配置配、注解

4、Bean的作用域:singleton(单例、默认)、prototype(多例)、request、session、global Session

5、Bean的生命周期:

  初始化完成后,Bean中通过implements InitializingBean接口,实现afterPropertiesSet方法;或在bean的xml中定义时加上init-method指定初始化完成后的方法

  销毁回调,Bean中通过implements DisposableBean接口,实现destroy方法;或在bean的xml中定义destory-method指定销毁的方法,可通过(AbstractApplicationContext)context.registerShutdownHook();来模拟关闭

  建议使用xml配置的方式来处理,init和destory方法处理起来非常灵活

6、Spring Bean后置处理器。BeanPostProcessor允许Bean在初始化前后对bean进行额外的处理,多个BeanPostProcessor可以通过实现Orderd接口,设置优先级

public class BeanInitialize implements BeanPostProcessor ,Ordered {

    @Override
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
System.out.println("初始化之前1:"+s);
return o;
} @Override
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
System.out.println("初始化之后1:"+s);
return o;
} @Override
public int getOrder() {
return 7;
}
}
@Data
public class UserBean implements InitializingBean,DisposableBean{
private String username; private int age; @Override
public void afterPropertiesSet() throws Exception {
System.out.println("属性设置完成了:"+this.getUsername());
} @Override
public void destroy() throws Exception {
System.out.println("对象被销毁"+this.getUsername());
}
}
<bean name="userBean" class="com.nuts.demo.spring.UserBean">
<property name="username" value="张三"/>
</bean>
<bean name="beanInitialize" class="com.nuts.demo.spring.BeanInitialize"/>
初始化之前1:userBean        ---------> BeanPostProcessor实现类的postProcessBeforeInitialization方法
属性设置完成了:张三      -----------> InitializingBean 实现类UserBean的afterPropertiesSet方法
初始化之后1:userBean      --------------> BeanPostProcessor实现类的postProcessAfterInitialization方法
Bean 内容:{"age":0,"username":"张三"} 
对象被销毁:张三          ------------> InitializingBean 实现类UserBean的destroy方法

  

Spring IOC 容器的更多相关文章

  1. Spring IoC容器的初始化过程

    Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生 ...

  2. 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境

    前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...

  3. 学习Spring(一) 实例化Spring IoC容器

    实例化Spring IoC容器 1,读取其配置来创建bean实例 2,然后从Spring IoC容器中得到可用的bean实例 Spring提供两种IoC容器实现类型 a,一种为bean工厂 b,应用程 ...

  4. MyEclipse Spring 学习总结一 Spring IOC容器

    一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...

  5. 对Spring IoC容器实现的结构分析

    本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...

  6. spring IOC容器实例化Bean的方式与RequestContextListener应用

    spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...

  7. 解读Spring Ioc容器设计图

    在Spring Ioc容器的设计中,有俩个主要的容器系列:一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能:另外一个是ApplicationContext应用上下 ...

  8. 纯注解快速使用spring IOC容器

    使用spring的ioc容器实现对bean的管理与基本的依赖注入是再经典的应用了.基础使用不在详述. 这里主要介绍下使用注解实现零配置的spring容器.我相信你也会更喜欢使用这种方式.Spring ...

  9. Spring IOC容器分析(2) -- BeanDefinition

    上文对Spring IOC容器的核心BeanFactory接口分析发现:在默认Bean工厂DefaultListableBeanFactory中对象不是以Object形成存储,而是以BeanDefin ...

  10. Spring IOC容器分析(4) -- bean创建获取完整流程

    上节探讨了Spring IOC容器中getBean方法,下面我们将自行编写测试用例,深入跟踪分析bean对象创建过程. 测试环境创建 测试示例代码如下: package org.springframe ...

随机推荐

  1. PAT 甲级 1010 Radix

    https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 Given a pair of positi ...

  2. 远程修改VMware ESXi服务器的密码(SSH)

    1,用vSphere client登录到服务器,将SSH启用. 2,使用ssh连接工具(我用的是secureCRT)远程登录,输入passwd,键入两次新密码,OK.  

  3. selenium之数据驱动框架应用WPS个人中心自动签到

    wps在注册后,有个每日签到的功能,签到后有几率送wps的专属金币[稻米],为了免费获得,又不想每天都是人工去执行签到动作,所以用selenium写了个小脚本,准备用数据驱动框架来完成这个事情,数据驱 ...

  4. 新手向:Vue 2.0 的建议学习顺序

    新手向:Vue 2.0 的建议学习顺序 尤雨溪   1 年前 注:2.0 已经有中文文档 .如果对自己英文有信心,也可以直接阅读英文文档.此指南仅供参考,请根据自身实际情况灵活调整.欢迎转载,请注明出 ...

  5. 三星vs苹果 2018Q3 财报 以及国内最赚钱的公司...

    三星文字版为: 10月31日消息,据国外媒体报道,当地时间周三韩国三星电子公布季度财报,得益于市场对其存储芯片和其他零部件的强劲需求,营业利润创下历史新高.三星不仅在自家设备上使用自己生产的芯片,还向 ...

  6. 理解RESTful架构【转】

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  7. Java 使用 Dbutils 工具类库 操作mysql

    Dbutils 官网http://commons.apache.org/proper/commons-dbutils/ 结合我个人写的JDBCUtils 写的 Dbutils 的使用demo . JD ...

  8. css中对position的几种定位方式的最佳诠释

    关于元素的position定位的理解,牛客网的hardy给出了一个比较好的理解: 在html中网页可以看成一个立体的空间,一个完整的页面是由很多个页面堆积形成的,如上图所示   CSS中Positio ...

  9. 用JavaScript添加选择按钮的背景颜色和juqery添加选择按钮的背景色

    在项目开发中经常遇到要选择的按钮,选择完之后被选择的按钮的背景色会发生变化,表示被选择 样式图如下: 每点击一个数字,相应的背景色变为蓝色,其他的依旧是白色,先用JavaScript实现 html代码 ...

  10. mappers标签引入映射器的四种方式

    第一种方式:mapper标签,通过resource属性引入classpath路径的相对资源 <!-- Using classpath relative resources --> < ...