Spring實例化Bean的三種方式
Spring實例化Bean的三種方式分別是:
1,xml配置使用bean的類構(gòu)造器
2,xml配置+factory類,使用靜態(tài)工廠方法實例化
3,xml配置+factory類,使用實例工廠方法實例化
以下分別說明
1,xml配置使用bean的類構(gòu)造器
2,xml配置+factory類,使用靜態(tài)工廠方法實例化
Spring實例化Bean 的xml文件配置
xml文件名:beans.xml
文件內(nèi)容:
- ﹤?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-2.5.xsd"﹥
- ﹤!-- the application context definition for the springapp DispatcherServlet --﹥
- ﹤bean id="sayhello" class="test.service.impl.HelloBean"/﹥
- ﹤bean id="sayhello2" class="test.service.impl.HelloBeanFactory" factory-method="createHelloBean"/﹥
- ﹤bean id="factory" class="test.service.impl.HelloBeanInstanceFactory"/﹥
- ﹤bean id="sayhello3" factory-bean="factory" factory-method="createHelloBean"/﹥
- ﹤/beans﹥
工廠Java文件
文件名:HelloBeanFactory.java
文件內(nèi)容:
- package test.service.impl;
- import test.service.Hello;
- public class HelloBeanFactory {
- public static Hello createHelloBean() {
- return new HelloBean();
- }
- }
Bean接口文件
文件名:Hello.java
文件內(nèi)容:
- package test.service;
- public interface Hello {
- public void sayHello();
- public void sayHello2();
- public void sayHello3();
- }
Bean實現(xiàn)文件
文件名:HelloBean.java
文件內(nèi)容:
- package test.service.impl;
- import test.service.Hello;
- public class HelloBean implements Hello {
- public void sayHello() {
- System.out.println("這是一個測試程序");
- }
- @Override
- public void sayHello2() {
- System.out.println("這是一個測試程序,測試靜態(tài)工廠創(chuàng)建bean");
- }
- @Override
- public void sayHello3() {
- System.out.println("這是一個測試程序,測試實例工廠創(chuàng)建bean");
- }
- }
3,xml配置+factory類,使用實例工廠方法實例化
xml文件配置
xml文件名:beans.xml
文件內(nèi)容:參照方法2中的紅字部分
工廠Java文件
文件名:HelloBeanInstanceFactory.java
文件內(nèi)容:
- package test.service.impl;
- import test.service.Hello;
- public class HelloBeanInstanceFactory {
- public Hello createHelloBean() {
- return new HelloBean();
- }
- }
Bean接口文件
文件名:Hello.java
文件內(nèi)容:參照方法2中的紅字部分
Bean實現(xiàn)文件
文件名:HelloBean.java
文件內(nèi)容:參照方法2中的紅字部分
Spring實例化Bean完成,最后測試文件
文件名:FirstSpring.java
文件內(nèi)容:
- package test.spring;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import test.service.Hello;
- public class FirstSpring {
- public static void main(String[] args) {
- testHello();
- testHelloForStaticFactory();
- testHelloForInstanceFactory();
- }
- public static void testHello() {
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
- Hello hello =(Hello) applicationContext.getBean("sayhello");
- hello.sayHello();
- }
- public static void testHelloForStaticFactory() {
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
- Hello hello =(Hello) applicationContext.getBean("sayhello2");
- hello.sayHello2();
- }
- public static void testHelloForInstanceFactory() {
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
- Hello hello =(Hello) applicationContext.getBean("sayhello3");
- hello.sayHello3();
- }
- }
都寫完了,來執(zhí)行一下,結(jié)果輸出:
這是一個測試程序
這是一個測試程序,測試靜態(tài)工廠創(chuàng)建bean
這是一個測試程序,測試實例工廠創(chuàng)建bean
總結(jié)
三種Spring實例化Bean方法的用處,
第一種方法,通過bean的缺省構(gòu)造函數(shù)創(chuàng)建,當(dāng)各個bean的業(yè)務(wù)邏輯相互比較獨立的時候或者和外界關(guān)聯(lián)較少的時候可以使用。
第二種方法,利用靜態(tài)factory方法創(chuàng)建,可以統(tǒng)一管理各個bean的創(chuàng)建,如各個bean在創(chuàng)建之前需要相同的初始化處理,則可用這個factory方法險進(jìn)行統(tǒng)一的處理等等。
第三種方法,利用實例化factory方法創(chuàng)建,即將factory方法也作為了業(yè)務(wù)bean來控制,覺得1可用于集成其他框架的bean創(chuàng)建管理方法,2能夠使bean和factory的角色互換。
【編輯推薦】