欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring中的Bean

程序员文章站 2022-03-03 11:50:21
...

前言

学习spring中Bean相关的知识和概念,目前只学了这么点,后面学习深入后会填补。




1. Bean的概念

  Bean是描述Java的软件组件模型,在Java模型中,通过Bean可以无限扩充Java程序的功能,通过Bean的组合可以快速生成新的应用程序,最重要的是可以实现代码的重复利用。



2. Bean中的包和类

最基本、最重要的包:

  1. org.springframework.beans
  2. org.springframework.context

最重要的类

  1. BeanFactory:提供了一种先进的配置来管理任何种类的Bean
  2. ApplicationContext:建立在BeanFactory之上,增加了更多功能,如:对于国际化的支持、获取资源、事件传递等。


3. bean的标识(id 和 name)

事例:

<bean id="hello1" class="com.jacks.demo2.impl.ChHello">
    <property name="msg">
        <value>你好</value>
    </property>
</bean>

<bean name="hello2" class="com.jacks.demo2.impl.EnHello">
    <property name="msg">
        <value>hello</value>
    </property>
</bean>

注意:

  1. id属性用于一个bean的唯一标识,即一个Bean只用一个id来指定。
  2. 配置文件中不能出现两个相同的id或者是name
  3. 没有指定id和name时,默认使用全类名作为标识,如下例。
bean标签
    <bean class="com.jacks.demo2.impl.ChHello">
    
获取
    getBean("com.jacks.demo2.impl.ChHello")

4. Bean的类(class)

事例:

<bean id="helloWorld" 
      class="com.jacks.demo1.HelloWorld">

在Spring的配置文档中,class属性用于指明Bean的来源,即Bean的路径。



5. Bean的scope

事例:

 <bean id="hello" class="com.base.demo1.Hello" scope="prototype"></bean>

scope用于指定Bean的作用范围,取值为:

  • singleton:单例的(默认值)
  • prototype:多例的


6. Bean的生命周期

  1. 单例对象
  • 出生:当容器创建时对象出生
  • 活着:只要容器还在,对象一致活着。
  • 死亡:容器销毁,对象消亡
  • 总结:单例对象的生命周期和容器相同
  1. 多例对象
  • 出生:当使用对象时,spring框架为我们创建
  • 活着:对象只要是在过程中就一直活着
  • 死亡:当对象长时间不用,且没有别的对象引用时,由java的垃圾回收器回收


7. Bean的初始化和销毁

实例:

<bean id="hello"
      class="com.base.demo1.Hello" 
      scope="singleton" 
      init-method="init" 
      destroy-method="destroy">
</bean>
//*********Hello.java*************
package com.base.demo1;
public class Hello{
    public void init() {
      ...
    }
    public void destroy() {
      ...
    }
}
  1. 在Hello类中添加一个init()方法,用于初始化Bean。
  2. 在Hello类中添加一个destroy()方法,用于销毁Bean。
  3. 在配置文档中用init-method指定Bean的初始化方法init()
  4. 在配置文档中用destroy-method指定Bean的销毁方法destroy()

8. 创建bean的三种方式

  1. 第一种方式:使用默认构造函数创建

  1.1 xml配置

	<bean id="accountService" class="com.base.service.impl.AccountServiceImpl"></bean>

  1.2 java程序

//***********IAccountService.java*************
package com.base.service;

public interface IAccountService {
    void saveAccount();
}
//*******************AccountService.java***************
package com.base.service.impl;

import com.base.service.IAccountService;

public class AccountServiceImpl implements IAccountService {
    public AccountServiceImpl(){
        System.out.println("对象创建了...");
    }
    public void saveAccount() {
        System.out.println("service中的saveAccount方法执行了...");
    }
    public void init() {
        System.out.println("对象初始化了...");
    }
    public void destroy() {
        System.out.println("对象销毁了...");
    }
}


  1. 第二种方式:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器

  2.1 xml配置

	<bean id="instanceFactory" class="com.base.factory.InstanceFactory"></bean>
    <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>

  2.2 java程序(基本程序在方式一)

//****************InstanceFactory.java***********
package com.base.factory;

import com.base.service.IAccountService;
import com.base.service.impl.AccountServiceImpl;

public class InstanceFactory {
    public IAccountService getAccountService(){
        return new AccountServiceImpl();
    }
}

  1. 第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)

  3.1 xml配置

	<bean id="accountService" class="com.base.factory.StaticFactory" factory-method="getAccountService"></bean> 

  3.2 java程序(基本程序在方式一)

//**********StaticFactory *************
package com.base.factory;

import com.base.service.IAccountService;
import com.base.service.impl.AccountServiceImpl;

public class StaticFactory {
    public static IAccountService getAccountService(){
        return new AccountServiceImpl();
    }
}


时间:2019年10月5日13:01:44


上一篇: spring bean装载

下一篇: Spring中的Bean