在类的根路径下创建一个任意名称的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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
让Spring管理资源,在配置文件中配置service和dao:
<!-- bean 标签:用于配置让 spring 创建对象,并且存入 ioc 容器之中 id 属性:对象的唯一标识。 class 属性:指定要创建对象的全限定类名 --> <!-- 配置 service --> <bean id="accountService" class="com.itcast.service.impl.AccountServiceImpl"></bean> <!-- 配置 dao -->
<bean id="accountDao" class="com.itcast.dao.impl.AccountDaoImpl"></bean>
测试类:
public class Client { /** * 使用 main 方法获取容器测试执行 */ public static void main(String[] args) { // 1.使用 ApplicationContext 接口,就是在获取 spring 容器 ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); // 2.根据 bean 的 id 获取对象 IAccountService aService = (IAccountService) ac.getBean("accountService"); System.out.println(aService); IAccountDao aDao = (IAccountDao) ac.getBean("accountDao"); System.out.println(aDao); } }
BeanFactory是Spring容器当中的顶层接口,AppliactionContext是它的子接口。
BeanFactory和ApplicationContext的区别在于创建对象的时间点不同。
ApplicationContext:只要一读取配置文件,默认情况下就会创建对象。
BeadFactory:什么时候使用什么时候创建对象。
ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件,推荐使用。
FileSystemXmlApplicationContext:它是从磁盘路径加载配置文件,配置文件可以在磁盘的任意位置。
AnnotationConfigApplicationContext:当我们使用注解配置容器对象时,需要使用此类来创建Spring容器,它用来读取注解。
Bean标签是用于配置对象让Spring来创建的。默认情况下它调用的是无参构造函数,如果没有无参构造函数则不能创建成功。
Bean标签的属性:
id:给对象在容器中提供一个唯一标识。用于获取对象。
class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
scope:指定对象的作用范围。
singleton:默认值,单例的。
prototype:多例的。
request:Web项目中,Spring创建一个Bean对象,将对象存入到request域中。
session:Web项目中,Spring创建一个Bean对象,将对象存入到session域中。
global session:Web项目中,应用在Portlet环境,如果没有Portlet环境,global session 等同于 session。
init-method:指定类中的初始化方法名称。
destroy-method:指定类中销毁方法的名称。
一个应用只有一个对象的实例。它的作用范围就是整个引用。
生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。
对象活着:只要容器在,对象就一直活着。
对象死亡:当应用拆卸,销毁容器时,对象就被销毁了。
每次访问对象时,都会重新创建对象实例。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不使用,会被Java的垃圾回收器回收。
第一种方式:使用默认无参构造函数。
<!--在默认情况下:它会根据默认无参构造函数来创建类对象。如果 bean 中没有默认无参构造函数,将会创建失败。-->
<bean id="accountService" class="com.itcast.service.impl.AccountServiceImpl"/>
第二种方式:Spring管理静态工厂,使用静态工厂的方法创建对象。
/** * 模拟一个静态工厂,创建业务层实现类 */ public class StaticFactory { public static IAccountService createAccountService(){ return new AccountServiceImpl(); } } <!-- 此种方式是:使用 StaticFactory 类中的静态方法 createAccountService 创建对象,并存入 spring 容器 id 属性:指定 bean 的 id,用于从容器中获取 class 属性:指定静态工厂的全限定类名 factory-method 属性:指定生产对象的静态方法 --> <bean id="accountService" class="com.itcast.factory.StaticFactory" factory-method="createAccountService"></bean>
第三种方式:Spring管理实例工厂,使用实例工厂的方法创建对象。
/** * 模拟一个实例工厂,创建业务层实现类 * 此工厂创建对象,必须现有工厂实例对象,再调用方法 */ public class InstanceFactory { public IAccountService createAccountService(){ return new AccountServiceImpl(); } } <!-- 此种方式是:先把工厂的创建交给 spring 来管理。然后在使用工厂的 bean 来调用里面的方法 factory-bean 属性:用于指定实例工厂 bean 的 id。 factory-method 属性:用于指定实例工厂中创建对象的方法。 --> <bean id="instancFactory" class="com.itcast.factory.InstanceFactory"></bean>
<bean id="accountService" factory-bean="instancFactory" factory-method="createAccountService"></bean>
原文:https://www.cnblogs.com/guancangtingbai/p/12617175.html