1. 程式人生 > >bean的4種例項化方法

bean的4種例項化方法

 

具體檔案格式

application.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

" >

<import resource="classpath:beaninstance/xml/beaninstance.xml"></import>

</beans>

 

 

beaninstance.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd" >

<!--bean的初始化-->

<!--①.構造器例項化(無引數構造器),最標準,使用最多。-->

 

<bean id="bean1" class="beaninstance.beanold.bean1"></bean>

<!--②.靜態工廠方法例項化:解決系統遺留問題

-->

<!-- class:靜態工廠的類名 從根目錄中獲取

factory-method:靜態工廠中對應的靜態方法,該方法會返回相對應的物件(在這裡返回的是bean2物件)

-->

<bean id="bean2" class="beaninstance.staticfactory.bean2factory" factory-method="getbean2"></bean>

<!--③.例項工廠方法例項化:解決系統遺留問題-->

<!--

配置時應該配置2bean,第一個為工廠bean,第二個為物件的bean

其中factory-bean:例項化工廠物件

factory-method:例項化工廠物件的方法,該方法返回對應的物件

-->

<bean id="bean3factory" class="beaninstance.instancefactory.bean3factory"></bean>

<bean id="bean3" factory-bean="bean3factory" factory-method="getbean3"></bean>

<!--④.實現FactoryBean介面例項化:例項工廠變種-->

<!-- class:為具體例項工廠 -->

<bean id="bean4" class="beaninstance.factorybean.bean4factory"></bean>

</beans>

 

 

 

//第一種例項化方式

bean1類

package beaninstance.beanold;

 

public class bean1 {

//<!--①.構造器例項化(無引數構造器),最標準,使用最多。-->

public bean1() {

System.out.println("走好選擇的路,別選擇好走的路,你才能擁有真正的自己。");

}

public void sayhello(){

System.out.println("所謂的焦慮就是書讀得太少,而想得又太多");

}

 

}

 

 

 

//第二種例項化方式

bean2類

package beaninstance.staticfactory;

 

public class bean2 {

//②.靜態工廠方法例項化:解決系統遺留問題

 

public bean2() {

System.out.println("剛開始是假裝堅強,後來就真的堅強了。");

}

public void sayhello(){

System.out.println("人間不會有單純的快樂,快樂總夾雜著煩惱和憂慮,人間也沒有永遠。");

}

}

 

 

 

bean2factory靜態工廠類

package beaninstance.staticfactory;

 

public class bean2factory {

//②.靜態工廠方法例項化:解決系統遺留問題

public static bean2 getbean2(){

return new bean2();

}

}

 

 

 

 

 

//第三種例項化方式

bean3類

package beaninstance.instancefactory;

 

public class bean3 {

public bean3() {

System.out.println("年輕的時候以為不讀書不足以瞭解人生,直到後來才發現如果不瞭解人生,是讀不懂書的。讀書的意義大概就是用生活所感去讀書,用讀書所得去生活吧。");

}

public void sayhello(){

System.out.println("我不要兒子,我要女兒──只要一個,像你的。見她之前,從未想結婚;娶她之後,我從未後悔");

}

}

 

 

bean3factory例項化工廠類

package beaninstance.instancefactory;

 

public class bean3factory {

public bean3 getbean3(){

return new bean3();

}

}

 

 

 

//第四種例項化方式

bean4類

package beaninstance.factorybean;

 

public class bean4 {

public bean4() {

System.out.println("我和誰都不爭,和誰爭我都不屑。簡樸的生活、高貴的靈魂是人生的至高境界。");

}

public void sayhello(){

System.out.println("一個人不想攀高就不怕下跌,也不用傾軋排擠,可以保其天真,成其自然,潛心一志完成自己能做的事。");

}

}

 

 

 

 

bean4factory工廠類

package beaninstance.factorybean;

 

import org.springframework.beans.factory.FactoryBean;

 

public class bean4factory implements FactoryBean<bean4> {

//例項工廠方法,建立當前類的物件

@Override

public bean4 getObject() throws Exception {

return new bean4();

}

 

//返回物件的型別

@Override

public Class<?> getObjectType() {

return bean4.class;

}

 

//是否弄成單例,如果返回true,永遠返回該物件

@Override

public boolean isSingleton() {

return true;

}

}

 

 

 

test測試類

package beaninstance.test;

 

import beaninstance.beanold.bean1;

import beaninstance.factorybean.bean4;

import beaninstance.instancefactory.bean3;

import beaninstance.instancefactory.bean3factory;

import beaninstance.staticfactory.bean2;

import beaninstance.staticfactory.bean2factory;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationContext;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//SpringJUnit4ClassRunner.class為單元測試

@RunWith(SpringJUnit4ClassRunner.class)

//@ContextConfiguration:關聯自己的測試檔案,xml格式檔案,其中檔案路徑為classpath路徑下的檔案

@ContextConfiguration("classpath:beaninstance/xml/beaninstance.xml")

public class test {

//自動注入

@Autowired

private bean1 bean1;

@Test

public void beaninstance(){

System.out.println(bean1);

bean1.sayhello();

}

//②.靜態工廠方法例項化:解決系統遺留問題

@Autowired

private ApplicationContext ctx;

@Test

public void testStaticFactory(){

//老方法

bean2 bean2= bean2factory.getbean2();

bean2.sayhello();

System.out.println(bean2);

//新方法

bean2 bean2new=ctx.getBean("bean2",bean2.class);

System.out.println("-----------------");

System.out.println(bean2new);

bean2new.sayhello();

}

//③.例項工廠方法例項化:解決系統遺留問題

@Test

public void testInstanceFactory(){

//老方法

bean3factory factory=new bean3factory();

bean3 bean3=factory.getbean3();

System.out.println(bean3);

bean3.sayhello();

//新方法

bean3 beannew3=ctx.getBean("bean3",bean3.class);

System.out.println(beannew3);

beannew3.sayhello();

}

@Test

public void testFactoryBean(){

bean4 bean4=ctx.getBean("bean4",bean4.class);

System.out.println(bean4);

bean4.sayhello();

}

}

 

 

 

測試結果如下