Bean工厂ApplicationContext

<?xml version="1.0" encoding="UTF-8"?>
<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-3.0.xsd"> //前缀

<bean id="helloWorld" class="com.tutorialspoint.HelloWorld"> 
    <property name="message" value="Hello World!"/> 
</bean>

1、创建一个xxx.XML文件,前缀必须带

2、<bean></bean>标签代表POJO,id:类名,class:类的全名

property:name和POJO中属性一一对应,有value:直接赋值 或者 ref:引用容器中已有的beans(id)

3、获取ApplicationContext:

ApplicationContext context = new ClassPathXmlApplicationContext(configLocation:"xxx.xml");

Bean 与 Spring 容器的关系

 Bean的作用域:(<bean>标签中,通过scope="xxxxx"改变值

1、singleton 是默认(缺省)的作用域,也就是说,当定义 Bean 时,如果没有指定作用域配置项,则 Bean 的作用域被默认为 singleton。

     Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象

     适用于无状态对象(Stateless Bean):就是没有实例变量的对象,不能保存数据,是不变类,是线程安全的。bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。

 

2、Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象

     适用于有状态对象(Stateful Bean):就是有实例变量的对象,可以保存数据,是非线程安全的。每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

 

Bean 定义继承:

1、子 bean 的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。

2、Bean 定义的继承与 Java 类的继承无关,但是继承的概念是一样的。

3、基于 XML 的配置元数据时,通过使用parent(父)属性,指定父 bean 作为该属性的值来表明子 bean 的定义。

4、一个 Bean 定义模板时,你不应该指定class(类)的属性,而应该指定带 true 值的abstract(抽象)属性。

5、父 bean 自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。它仅仅作为一个纯粹的模板 bean 定义来使用的,充当子定义的父定义使用。

原文地址:https://www.cnblogs.com/mo-jian-ming/p/13251571.html