Spring?IOC?xml方式進(jìn)行工廠(chǎng)Bean操作詳解
spring中有兩種Bean
第一種 普通 Bean 就是我們?cè)谂渲梦募?定義的類(lèi)對(duì)象 創(chuàng)建bean 并定義相關(guān)的id和聲明類(lèi)對(duì)象
普通bean的特點(diǎn)在于 在配置文件中定義的類(lèi)型 也就是返回類(lèi)型
就比如 你定義的是一個(gè) book類(lèi)的類(lèi)型 那你這個(gè)bean返回的 也比如是個(gè)book類(lèi)型的對(duì)象
第二種 是在工廠(chǎng)類(lèi)中統(tǒng)一管理的工廠(chǎng)Bean
特點(diǎn)上 還是有比較大區(qū)別的 首先 工廠(chǎng)Bean 又叫FactoryBean 他定義的類(lèi)型和返回類(lèi)型是可以不一樣的
通常作為一個(gè)工廠(chǎng)類(lèi) 來(lái)管理bean對(duì)象操作
我們創(chuàng)建一個(gè)java項(xiàng)目 引入spring中的基本依賴(lài)
然后在src下創(chuàng)建兩個(gè)包 我這里直接叫 spring5 和 collectiontype 你們可以根據(jù)自己的喜好起名 跟我的一樣 可以避免一些名字問(wèn)題 畢竟你們的代碼大部分可以直接從我這復(fù)制
然后 我們?cè)?collectiontype包下創(chuàng)建一個(gè) Course 類(lèi) 參考代碼如下
package collectiontype;
//課程類(lèi)
public class Course {
//課程名稱(chēng)
private String cname;
public void setCname(String cname) {
this.cname = cname;
}
public String toString() {
return "cname = "+cname;
}
}
這是一個(gè)管理課程的類(lèi) 定義 字符串的cname 代表課程名稱(chēng) 然后 定義了他的set方法
改寫(xiě)了類(lèi)的toString方法 這樣直接輸出對(duì)象 就會(huì)輸出cname的值
在 spring5目錄下創(chuàng)建一個(gè)java類(lèi) 我這里取名為MyBean
package spring5;
import collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;
public class MyBean implements FactoryBean<Course> {
@Override
public Course getObject() throws Exception {
Course course = new Course();
course.setCname("測(cè)試工具");
return course;
}
@Override
public Class<?> getObjectType() {
return null;
}
}
這里 我們實(shí)現(xiàn)了 FactoryBean接口 這樣就表示他是一個(gè)工廠(chǎng)類(lèi)
然后 定義泛型 指定Course對(duì)象類(lèi)型 這個(gè)就代表 我們返回的是一個(gè) Course類(lèi)的對(duì)象
getObject返回的值 就是最后 bean對(duì)象返回的值
然后我們?cè)趕rc下創(chuàng)建 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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mybean" class="spring5.MyBean"></bean>
</beans>
這里 我們就創(chuàng)建了一個(gè)bean MyBean對(duì)象
然后 在src下創(chuàng)建一個(gè)text測(cè)試類(lèi) 參考代碼如下
import collectiontype.Course;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class text {
public static void main(String args[]) {
//獲取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Course course = context.getBean("mybean", Course.class);
System.out.println(course);
}
}
可以看到 我們創(chuàng)建的是mybean的對(duì)象反射對(duì)象 但我們接收的類(lèi)型是Course類(lèi)的 因?yàn)槲覀僊yBean實(shí)際返回的是一個(gè)Course類(lèi)的對(duì)象
然后通過(guò)System.out.println輸出了對(duì)象的toString方法
運(yùn)行結(jié)果如下

到此這篇關(guān)于Spring IOC xml方式進(jìn)行工廠(chǎng)Bean操作詳解的文章就介紹到這了,更多相關(guān)Spring 工廠(chǎng)Bean操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
全面解析Spring Security 內(nèi)置 Filter
這篇文章主要介紹了Spring Security 內(nèi)置 Filter的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot使用validation做參數(shù)校驗(yàn)的實(shí)現(xiàn)步驟
這篇文章主要介紹了SpringBoot使用validation做參數(shù)校驗(yàn)的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下2021-05-05
Spring容器初始化擴(kuò)展點(diǎn)之ApplicationContextInitializer詳解
ApplicationContextInitializer是Spring框架提供的一個(gè)接口,用于在Spring應(yīng)用上下文刷新之前對(duì)其進(jìn)行自定義初始化,本文介紹Spring容器初始化擴(kuò)展點(diǎn)之ApplicationContextInitializer,感興趣的朋友一起看看吧2025-02-02
java堆棧類(lèi)使用實(shí)例(java中stack的使用方法)
java中stack的使用方法,堆棧是一種"后進(jìn)先出"(LIFO) 的數(shù)據(jù)結(jié)構(gòu), 只能在一端進(jìn)行插入(稱(chēng)為"壓棧") 或刪除 (稱(chēng)為"出棧")數(shù)據(jù)的操作,下面看示例吧2013-12-12

