03-spring bean
目錄
- 一、spring 基于 xml 的 IOC 環(huán)境搭建和入門
- 1.pom.xml
- 2.類
- 3. bean.xml
- 4.主函數(shù)
- 5.總結
- 二、BeanFactory和ApplicationContext的區(qū)別
- 三、spring 中 bean 的細節(jié)之三種創(chuàng)建 Bean 對象的方式
- 1. 第一種方式:使用默認構造函數(shù)創(chuàng)建。
- 2.第二種方式:
- 3.第三種方式:
- 四、spring中bean的細節(jié)之作用范圍
- 1.bean標簽訂單scope屬性:
- 2.bean 對象的生命周期
- Ⅰ單例對象
- Ⅱ多例對象
一、spring 基于 xml 的 IOC 環(huán)境搭建和入門
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>spring02</groupId><artifactId>spring02</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency></dependencies></project>2.類
將上次的耦合和解耦的筆記放進去
3. bean.xml
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--把對象的創(chuàng)建交給 spring 來管理--><bean id="accountService" class="com.service.impl.AccountServiceImpl"/><bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/> </beans>4.主函數(shù)
public class Client {/*** 獲取 spring 的 ioc 核心容器,并根據(jù) id 獲取對象* @param args*/public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService accountService=(IAccountService)ac.getBean("accountService");IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);System.out.println(accountService);System.out.println(accountDao);} }5.總結
ApplicationContext的三個常用實現(xiàn)類:
ClassPathXmlApplicationContext:他可以加載類路徑下的配置文件,要求配置文件必須在類路徑下,不在的話,加載不了。
AnnotationConfigApplicationContext:它是用于讀取注解創(chuàng)建容器的。
獲取配置文件對應實現(xiàn)類有兩種方法:
- IAccountService accountService=(IAccountService)ac.getBean("accountService");
二、BeanFactory和ApplicationContext的區(qū)別
public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService accountService=(IAccountService)ac.getBean("accountService");IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);System.out.println(accountService);System.out.println(accountDao);/*-------BeanFactory-------------*/Resource resource=new ClassPathResource("bean.xml");BeanFactory beanFactory=new XmlBeanFactory(resource);IAccountService as=(IAccountService)beanFactory.getBean("accountService");System.out.println(as);} }核心容器接口兩個引發(fā)出的問題:
ApplicationContext: (單例對象適用)
他在創(chuàng)建核心容器時,創(chuàng)建對象采取的策略是采用立即加載的方式。也就是說,只要一讀完配置文件馬上就創(chuàng)建配置文件的對象。
BeanFactory: (多例對象適用)
他在創(chuàng)建核心容器時,創(chuàng)建對象采取的策略是采用延遲加載的方式。也就是說,什么時候根據(jù) id 獲取對象了,什么時候才真正的創(chuàng)建對象。
三、spring 中 bean 的細節(jié)之三種創(chuàng)建 Bean 對象的方式
1. 第一種方式:使用默認構造函數(shù)創(chuàng)建。
- 在spring的配置文件中使用bean標簽,配以id和class屬性之后,且沒有其他屬性和標簽時。 采用的就是默認構造函數(shù)創(chuàng)建bean對象,此時如果類中沒有默認構造函數(shù),則對象無法創(chuàng)建
2.第二種方式:
- 使用普通工廠中的方法創(chuàng)建對象(使用某個類中的方法創(chuàng)建對象,并存入spring容器)
3.第三種方式:
- 使用工廠中的靜態(tài)方法創(chuàng)建對象(使用某個類中的靜態(tài)方法創(chuàng)建對象,并存入spring容器)
四、spring中bean的細節(jié)之作用范圍
bean 的作用范圍調(diào)整
1.bean標簽訂單scope屬性:
作用:用于指定bean作用范圍 取值:常用的就是單例的于多例的
singleton:單例的(默認值)
prototype:多例的
request:作用與web應用的請求范圍
session:作用于web應用的會話范圍
global-session:作用于集群環(huán)境的會話范圍(全局會話范圍),當不是集群環(huán)境時,它就是session
對于 global-session 的理解
global session 可以理解為全局 session
2.bean 對象的生命周期
Ⅰ單例對象
出生:當容器創(chuàng)建時對象出生
活著:只要容器還在,對象一直活著
死亡:單例對象的生命周期和容器相同多例對象
實現(xiàn)類
public class AccountServiceImpl implements IAccountService {private IAccountDao accountDao=new AccountDaoImpl();public void saveAccount() {accountDao.saveAccount();}public void init(){System.out.println("對象初始化");}public void destroy(){System.out.println("對象銷毀");} }xml 文件
<bean id="accountService" class="com.service.impl.AccountServiceImpl" scope="singleton"init-method="init" destroy-method="destroy"/><bean id="accountDao" class="com.dao.impl.AccountDaoImpl"/>主函數(shù)
public class Client {public static void main(String[] args) {ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");IAccountService as=ac.getBean("accountService",IAccountService.class);as.saveAccount();ac.close();} }運行結果
對象初始化 保存成功 對象銷毀Ⅱ多例對象
出生:當我們使用時 spring 框架為我們創(chuàng)建
活著:對象只要是在使用過程中就一直活著
死亡:當對象長時間不用,且沒有別的對象引用時,由Java的垃圾回收器回收
轉載于:https://www.cnblogs.com/zuiren/p/11415413.html
總結
以上是生活随笔為你收集整理的03-spring bean的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 04-spring的依赖注入
- 下一篇: 吐槽express 中间件multer