spring5.0学习笔记3

BeanFactory和ApplicationContext的区别
ApplicationContext 立即加载,读取完配置文件后立即创建配置文件中的对象
BeanFactory 延迟加载,什么时候根据id获取对象,什么时候才创建对象

三种创建bean的方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">	
<!-- 把创建对象交给spring管理 -->	
<!-- 1.使用bean标签创建 ,使用默认构造函数创建			
<bean id="accountServerice" class="com.test.AccountServiceImp"></bean>-->
<!-- 使用普通工厂中的方法创建对象
<bean id="instanceFactory" class="com.test.IntanceFactory"></bean>
<bean id="accountService" factory-bean="instanceFactory"" factory-method="getAccountService"></bean> -->
<!-- 使用工厂中的静态方法 -->
<bean id="accountService" class="com.test.StaticFactory" factory-method="getAccountService"/>
</beans>
/**
 * bean的三种创建方式
 */
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 模拟一个表现层,用户调用业务层
 * @author Administrator
 *
 */
  /**
   * 获取spring的IOC核心容器
   * ApplicationContext的三个常用实现类
   * 	ClassPathXmlApplicationContext:可以加载类路径下的配置文件  常用
   * 	FileSystemXmlApplicationContext:加载任意磁盘下的配置文件,必须有访问权限
   * 	AnnotationConfigApplicationContext:用于读取注解创建容器的
   */
public class Test{
    public static void main(String[] args){
    	//1.获取核心容器对象
    	ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
    	//2.根据id获取bean对象
    	IAccountService as = (IAccountService)ac.getBean("accountService");
    	System.out.println(as);
    }
}
/**
 * 创建bean对象的工厂
 * Bean 在计算机术语中,含义为可重用组件
 * JavaBean,用java语言编写的可重用组件
 * 		JavaBean >实体类
 * 		具体到项目中,就是service和dao对象
 * 		第一个:配置一个文件来配置service和dao,配置的内容是唯一标识的权限定内名
 * 		第二个:通过读取配置文件内容,反射创建对象
 * 
 * 		配置文件可以是propertie也可以使xml
 */

class IntanceFactory{
	public IAccountService getAccountService(){
		return new AccountServiceImp();
	}
}

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

interface IAccountService{
	/**
	 * 模拟保存账户
	 */
	public void saveAccount();
}

/**
 * 业务层实现类
 */
class AccountServiceImp implements IAccountService{
	public void saveAccount(){
		 System.out.println("save a account");
	 }
}

Bean的作用范围

singleton 单例
prototype 多例
request 作用于web应用的request范围
session 作用于web应用的session范围
global 作用于集群环境的会话范围

Bean的生命周期

singleton 容器创建时对象出生
容器在,对象在
容器亡,对象亡

prototype 第一次使用对象出生
,使用对象过程中一直活着,垃圾回收器回收

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">	
<!-- 把创建对象交给spring管理 -->	
<!-- 1.使用bean标签创建 ,使用默认构造函数创建	-->		
<bean id="accountService" class="com.test.AccountServiceImp"
	scope="singleton" init-method="init" destroy-method="destroy"></bean>
</beans>
/**
 * bean生命周期
 */
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 模拟一个表现层,用户调用业务层
 * @author Administrator
 *
 */
  /**
   * 获取spring的IOC核心容器
   * ApplicationContext的三个常用实现类
   * 	ClassPathXmlApplicationContext:可以加载类路径下的配置文件  常用
   * 	FileSystemXmlApplicationContext:加载任意磁盘下的配置文件,必须有访问权限
   * 	AnnotationConfigApplicationContext:用于读取注解创建容器的
   */
public class Test{
    public static void main(String[] args){
    	//1.获取核心容器对象
    	ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
    	//2.根据id获取bean对象
    	IAccountService as = (IAccountService)ac.getBean("accountService");
    	System.out.println(as);
    	as.saveAccount();
    	//手动关闭容器
    	ac.close();
    }
}

interface IAccountService{
	/**
	 * 模拟保存账户
	 */
	public void saveAccount();
}

/**
 * 业务层实现类
 */
class AccountServiceImp implements IAccountService{
	public AccountServiceImp(){
		System.out.println("accountService对象创建了");
	}
	
	public void init(){
		System.out.println("对象初始化了");
	}
	
	public void destroy(){
		System.out.println("对象销毁了");
	}
	public void saveAccount(){
		 System.out.println("save a account");
	 }
}
2020-3-24 22:11:24 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1ef9f1d: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1ef9f1d]; startup date [Tue Mar 24 22:11:24 CST 2020]; root of context hierarchy 2020-3-24 22:11:24 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from class path resource [bean.xml] 2020-3-24 22:11:25 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@1ef9f1d]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1175422 2020-3-24 22:11:25 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1175422: defining beans [accountService]; root of factory hierarchy accountService对象创建了 对象初始化了 com.test.AccountServiceImp@102799c save a account 2020-3-24 22:11:25 org.springframework.context.support.AbstractApplicationContext doClose 信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@1ef9f1d: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1ef9f1d]; startup date [Tue Mar 24 22:11:24 CST 2020]; root of context hierarchy 2020-3-24 22:11:25 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons 信息: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1175422: defining beans [accountService]; root of factory hierarchy 对象销毁了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值