1. 程式人生 > >模擬Spring容器使用bean.xml建立物件的過程

模擬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

Springbean.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

SpringBean建立和裝配

前言 最近在重溫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構建的,提供企業極的服務。    常用的幾種應用上下

手動建立動態代理物件beanspring容器

一般編寫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多執行緒中注入SpringBean-使用靜態方法直接取的容器中的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.容器物件需要