模擬Spring容器使用bean.xml建立物件的過程
正式使用spring之前先來體驗一下spring的自動建立物件,讓面向物件程式設計變成面向介面程式設計。
思路:
在呼叫spring的bean.xml配置時,就已經自動建立Dao層和Service層的物件
一、JAR包
因為是來體驗spring的bean.xml,所以不需要連線資料庫,那就只需要spring的四個核心包。
spring-beans、context、core、expression 四大金剛
二、介面
兩個介面
一個是Dao介面ICustomerDao.java 裡面編寫一個void方法saveCustomer();
一個是Service介面ICustomerService.java 裡面也編寫一個void方法saveCustomer();
三、實現類
兩個介面對應兩個實現類,程式碼如下
package service.impl; import org.springframework.beans.factory.BeanFactory; import dao.ICustomerDao; import service.ICustomerService; public class CustomerServiceImpl implements ICustomerService { //建立customerDao用來接收Dao層資料 private ICustomerDao customerDao; public void setCustomerDao(ICustomerDao customerDao) { this.customerDao = customerDao; } @Override public void saveCustomer() { System.out.println("業務層呼叫持久層"); customerDao.saveCustomer(); } }
package dao.impl; import dao.ICustomerDao; public class CustomerDaoImpl implements ICustomerDao { //模擬一個持久層實現類 @Override public void saveCustomer() { System.out.println("持久層儲存了客戶"); } }
為什麼要在saveCustomer裡面輸出?Dao層是和資料庫連線然後將得到的資料通過Dao層的物件傳給業務層,
那麼這個時候customer(也就是資料)就存在物件中,Service也一樣 ,需要將Dao層的資料傳給客戶端,
那麼就需要物件,所以這個saveCustomer方法的輸出就可以體現資料的轉移過程,以及bean.xml的建立物件過程。
四、bean.xml
這個時候bean.xml的配置就變得很明朗了,既然spring是可以建立物件,那就必須是為了上面兩個類來建立物件的。
而我們配置的時候就從service物件開始。至於為什麼從service開始,自己也不是很理解。
<?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">
<!-- 配置Service 讓spring為Service建立物件 並且在Service層需要呼叫Dao層來獲取資料
所以還要加一個對映,將dao層物件匯入service-->
<bean id="customerService" class="service.impl.CustomerServiceImpl">
<property name="customerDao" ref="customerDao"></property>
</bean>
<!-- 配置Dao id需要和呼叫的Name一致 -->
<bean id="customerDao" class="dao.impl.CustomerDaoImpl"></bean>
</beans>
五、執行
這個時候就是要把上面所有的物件關聯起來了,那就建立一個客戶端類Client.java並帶有main方法
首先在main方法下,建立一個spring容器物件,並且物件通過ClassPathXmlApplicationContext獲取到bean.xml檔案而建立
那麼該物件裡就已經拿到了bean裡面的內容,在這個時候也已經建立了兩個物件。
而 ICustomerService cs這個物件通過spring物件的getBean方法獲取名為customerService的值時,
cs就已經成為了CustomerServiceImpl的物件,另外一個Dao物件在這個時候通過set方法傳遞給了customerDao.
下面貼程式碼
package ui;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.ICustomerService;
public class Client {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
ICustomerService cs=(ICustomerService) ac.getBean("customerService");
cs.saveCustomer();
}
}
可以看到最後cs呼叫了saveCustomer()方法,完成了這一段spring容器建立物件過程的模擬。
相關推薦
模擬Spring容器使用bean.xml建立物件的過程
正式使用spring之前先來體驗一下spring的自動建立物件,讓面向物件程式設計變成面向介面程式設計。思路: 在呼叫spring的bean.xml配置時,就已經自動建立Dao層和Service層的物件一、JAR包 因為是來體驗spring的bean.xm
Spring用bean.xml注入物件
Spring的物件注入 寫一個類 public class Circle { @Override public String toString() { return "Circle [radius=" + radius +
Mybatis在spring容器中的初始化過程
tsql tor 懶加載 alt onf mes text batis mybatis 由servlet容器調用容器啟動監聽器 spring的applicationContext刷新 實例化所有的單例(非懶加載的) beanNames:所有的單例(非懶加載的)的id,
模擬Spring容器的getBean方法(Maven工程)
程序 初始化 png 方法 控制臺 ont 控制臺輸出 maven工程 配置 Spring容器的getBean方法是通過反射機制實現的,下面的測試程序模擬getBean的實現原理. 步驟一:pom.xml文件配置解析XML文件的dom4j.jar 步驟二:XML文件中配置
spring中applicationContext.xml的載入過程
web容器在啟動時,會執行事先配置的監聽器ContextLoaderListener裡的contextInitialized方法,該方法再去呼叫了initWebApplicationContext方法。 該方法載入了ContextLoader類,在ContextLo
Java中String建立物件過程及其運算原理
一、String類的常見問題解析 1.1、new String(“hello”)建立了幾個物件 不考慮其他因素,String b = new String("hello");這行程式碼到底建立了幾個物件? 情況一,建立了一個物件: Strin
java 關於初學面向物件的問題二:建立物件過程
在有static、final、extends、implements修飾的類(包括屬性和方法)的物件建立過程。因此約定下述引用宣告和物件建立: 匿名物件:沒有宣告引用的物件,一般是Has-a關係中的類建
JVM(二)JVM 建立物件過程分析
在語言層面上,建立物件通常僅僅是一個new關鍵字而已,而在虛擬機器中,物件(文中討論的物件限於普通Java物件,不包括陣列和Class物件等)的建立又是怎樣一個過程呢?首先來看一下JVM建立物件時的流程圖: Created with Raphaël 2.1
Spring之Bean的建立和裝配
前言 最近在重溫Spring,因此決定寫一系列的關於Spring學習的部落格,一是為了加深自己的理解,二來希望能幫助更多的朋友掌握Spring。我用到的Spring版本是3.1.1。 Spring建立Bean Bean應該說是Spring中最基本的配置
跟我猜Spring-Boot:bean的建立
## 廢話在前 最近幾年的技術路子很雜,先是node,然後是php,後來是openresty,再後來轉到了java,而接觸的框架(Framework),也越發的複雜,從最開始的express/koa,到lumen ,再到spring全家桶,各種切換,也確實一度頭疼; 一般而言,學習一種技術下的某種框架當然是
Spring IoC bean 的建立(上)
# 前言 本系列全部基於 `Spring 5.2.2.BUILD-SNAPSHOT` 版本。因為 Spring 整個體系太過於龐大,所以只會進行關鍵部分的原始碼解析。 本篇文章主要介紹 Spring IoC 容器是怎麼建立 `bean` 的例項。 # 正文 在上一篇[Spring IoC bean 的
spring容器建立bean物件的方式
1)xml檔案中有bean的配置,而且這個bean所對應的java類中存在一個無參構造器,那麼這個時候spring容器就可以使用反射呼叫無參構造器來建立例項了(常規的方式) 2)通過工廠類獲得例項(工廠類實現了介面FactoryBean<?>) 例如: xml中的配置
Spring 容器及物件建立的過程
Spring容器負責物件的建立過程,配置並且管理他們的建立過程,從建立到被回收。Spring有多種容器的實現,分為兩種型別,bean工廠,最簡單的容器,提供DI的支援。應用上下文是基於beanFactory構建的,提供企業極的服務。 常用的幾種應用上下
手動建立動態代理物件bean到spring容器
一般編寫spring boot starter時都涉及到自動配置,自動配置的的實現都涉及的手動註冊bean到容器和從容器獲取bean。 一般的情況下,自動配置的方式可以參考spring-boot自動配置(AutoConfiguration)的實現,來定義我們的
手動建立(new)物件,使用spring容器中的bean(ServletContext)。
場景:一個不受spring管理的靜態工廠方法,根據傳入的引數不同,返回不同的實現類物件(關鍵點:實現類物件需要使用spring容器中的資料訪問層物件dao或mapper)。 疑難點:如何從spring容器中獲取bean,並注入到自己new出來的物件中。 解決方案:使用spr
spring原始碼解讀-xml中配置一個bean到容器的生產一個bean例項都經歷了那些過程
1、定位 定位 就是定位xml中的資訊 2、載入 就是把使用者定義好的xmlbean資訊
Spring_(3)通過xml配置bean+建立物件
先來看整體專案的結構 HelloWorld.java package com.spring.beans; public class HelloWorld { private String name; public void setName(String na
Java多執行緒中注入Spring的Bean-使用靜態方法直接取的容器中的spring物件
目前認為比較好的解決方案。 1,工具類 public class SpringApplicationContextHolder implements ApplicationContextAware { private static ApplicationContext context
實現ApplicationContextAware介面,java(new或者java反射獲取的物件)中獲取spring容器的bean
本文參考了https://blog.csdn.net/bailinbbc/article/details/76446594,其實是拷貝了很多內容: 在Web應用中,Spring容器通常採用宣告式方式配置產生:開發者只要在web.xml中配置一個Listener,該Listener將會負責初始化S
spring-web:在web應用中即使用監聽器建立spring容器物件
spring-web2:在web應用中,使用spring。spring管理Service,Dao物件,而servlet、JSP、監聽器物件是由Tomcat生成的 web專案中使用spring的問題: 1.容器物件建立多次了, 應該是建立一次 (在應用啟動的時候建立一次) 2.容器物件需要