您好,登錄后才能下訂單哦!
這篇文章主要介紹了Spring實(shí)例化bean的方式有哪些的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Spring實(shí)例化bean的方式有哪些文章都會(huì)有所收獲,下面我們一起來看看吧。
bean本質(zhì)上就是對(duì)象,創(chuàng)建bean使用構(gòu)造方法完成
BookDao接口:
public interface BookDao { public void save(); }
BookDaoImpl實(shí)現(xiàn)類,利用構(gòu)造方式提供可訪問的構(gòu)造方法,輸出相應(yīng)字符串:
import com.itheima.dao.BookDao; public class BookDaoImpl implements BookDao { public BookDaoImpl() { System.out.println("book dao constructor is running ...."); } public void save() { System.out.println("book dao save ..."); } }
AppForinstanceBook:
import com.itheima.dao.BookDao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceBook { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); BookDao bookDao = (BookDao) ctx.getBean("bookDao"); bookDao.save(); } }
applictionContext.xml配置:
<!--方式一:構(gòu)造方法實(shí)例化bean--> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
執(zhí)行結(jié)果:
無參構(gòu)造方法如果不存在,將拋出異常BeanCreationException
OrderDao接口:
public interface OrderDao { public void save(); }
OrderDaoImpl實(shí)現(xiàn)類:
import com.itheima.dao.OrderDao; public class OrderDaoImpl implements OrderDao { public void save() { System.out.println("order dao save ..."); } }
OrderDaoFactory靜態(tài)工廠創(chuàng)建對(duì)象:
import com.itheima.dao.OrderDao; import com.itheima.dao.impl.OrderDaoImpl; //靜態(tài)工廠創(chuàng)建對(duì)象 public class OrderDaoFactory { public static OrderDao getOrderDao(){ System.out.println("factory setup...."); return new OrderDaoImpl(); } }
AppForinstanceOrder:
import com.itheima.dao.OrderDao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceOrder { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); OrderDao orderDao = (OrderDao) ctx.getBean("orderDao"); orderDao.save(); } }
applictionContext.xml配置:
<!--方式二:使用靜態(tài)工廠實(shí)例化bean--> <bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>
執(zhí)行結(jié)果:
這種方式是為了兼容早期的遺留系統(tǒng)使用,了解即可。
UserDao接口:
public interface UserDao { public void save(); }
UserDaoImpl實(shí)現(xiàn)類:
import com.itheima.dao.UserDao; public class UserDaoImpl implements UserDao { public void save() { System.out.println("user dao save ..."); } }
UserDaoFactory實(shí)例工廠創(chuàng)建對(duì)象:
import com.itheima.dao.UserDao; import com.itheima.dao.impl.UserDaoImpl; //實(shí)例工廠創(chuàng)建對(duì)象 public class UserDaoFactory { public UserDao getUserDao(){ return new UserDaoImpl(); } }
AppForInstanceUser:
import com.itheima.dao.UserDao; import com.itheima.factory.UserDaoFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceUser { public static void main(String[] args) { //創(chuàng)建實(shí)例工廠對(duì)象 UserDaoFactory userDaoFactory = new UserDaoFactory(); //通過實(shí)例工廠對(duì)象創(chuàng)建對(duì)象 UserDao userDao = userDaoFactory.getUserDao(); userDao.save(); } }
因?yàn)椴皇庆o態(tài)方法,必須用工廠對(duì)象對(duì)象調(diào)用。
也可用Spring方法,不過要在xml文件中進(jìn)行修改。
AppForInstanceUser:
import com.itheima.dao.UserDao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceUser { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) ctx.getBean("userDao"); userDao.save(); } }
applictionContext.xml配置:
userFactory配合使用的,實(shí)際無意義
factory-method方法名不固定,每次都需要配置
<!--方式三:使用實(shí)例工廠實(shí)例化bean--> <bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/> <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
執(zhí)行結(jié)果:
UserDao接口和UserDaoImpl實(shí)現(xiàn)類和實(shí)例化三一樣。
UserDaoFactoryBean,代替了原始實(shí)例化工廠中創(chuàng)建對(duì)象的方法:
import com.itheima.dao.UserDao; import com.itheima.dao.impl.UserDaoImpl; import org.springframework.beans.factory.FactoryBean; //FactoryBean創(chuàng)建對(duì)象 public class UserDaoFactoryBean implements FactoryBean<UserDao> { //代替原始實(shí)例工廠中創(chuàng)建對(duì)象的方法 public UserDao getObject() throws Exception { return new UserDaoImpl(); } public Class<?> getObjectType() { return UserDao.class; } }
AppForInstanceUser:
import com.itheima.dao.UserDao; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceUser { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) ctx.getBean("userDao"); userDao.save(); } }
applictionContext.xml配置:
<!--方式四:使用FactoryBean實(shí)例化bean--> <bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>
執(zhí)行結(jié)果:
對(duì)象默認(rèn)單例,需要改非單例時(shí)
在UserDaoFactoryBean重寫isSingleton方法,true為單例模式,false為非單例模式
通常為單例,這個(gè)方法通常不寫
public boolean isSingleton() { return true; }
關(guān)于“Spring實(shí)例化bean的方式有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Spring實(shí)例化bean的方式有哪些”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。