Spring中的Bean
程序员文章站
2022-03-03 11:50:21
...
前言
学习spring中Bean相关的知识和概念,目前只学了这么点,后面学习深入后会填补。
文章目录
1. Bean的概念
Bean是描述Java的软件组件模型,在Java模型中,通过Bean可以无限扩充Java程序的功能,通过Bean的组合可以快速生成新的应用程序,最重要的是可以实现代码的重复利用。
2. Bean中的包和类
最基本、最重要的包:
- org.springframework.beans
- org.springframework.context
最重要的类
- BeanFactory:提供了一种先进的配置来管理任何种类的Bean
- 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>
注意:
- id属性用于一个bean的唯一标识,即一个Bean只用一个id来指定。
- 配置文件中不能出现两个相同的id或者是name
- 没有指定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的生命周期
- 单例对象
- 出生:当容器创建时对象出生
- 活着:只要容器还在,对象一致活着。
- 死亡:容器销毁,对象消亡
- 总结:单例对象的生命周期和容器相同
- 多例对象
- 出生:当使用对象时,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() {
...
}
}
- 在Hello类中添加一个init()方法,用于初始化Bean。
- 在Hello类中添加一个destroy()方法,用于销毁Bean。
- 在配置文档中用init-method指定Bean的初始化方法init()
- 在配置文档中用destroy-method指定Bean的销毁方法destroy()
8. 创建bean的三种方式
- 第一种方式:使用默认构造函数创建
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("对象销毁了...");
}
}
- 第二种方式:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入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();
}
}
- 第三种方式:使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入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