1. 程式人生 > >Spring之Bean的配置方式

Spring之Bean的配置方式

在部落格中為了演示容器Bean例項化時暴露出的幾個介面,將UserBean配置在XML中,其實常見的Bean的配置有3種。1.基於xml配置Bean 2.使用註解定義Bean 3.基於java類提供Bean定義資訊。

一、基於xml配置Bean

基於XML配置Bean時,Spring通過<bean>配置來例項化、設定bean的屬性以及設定bean間的相互依賴性。一個<bean>通常需要定義id和class屬性。class屬性是必須的,不然Spring怎麼知道是哪個呢。id不是必須的,不過如果配置檔案中配置的其他bean要引用該bean,則id也是必須的,通常都加上。

<bean id="user" class
="com.demo.model.UserBean"></bean>

二、使用註解定義Bean

如果採用基於XML的配置,bean定義資訊和bean實現類本身是分離的,而採用基於註解的配置方式時,bean定義資訊即通過在bean實現類上標註註解實現。在第二章節中定義Air和Person時都使用了@Component來註解bean。

package com.demo.model;

import org.springframework.stereotype.Component;

@Component
public class CleanAir implements IAir {
    @Override
    
public String toString() { return "CleanAir"; } }

我們使用@Component註解在CleanAir 類宣告處對類進行標註,它可以被Spring容器識別,Spring容器自動將POJO轉換為容器管理的bean。它和<bean id="CleanAir" class="com.demo.model.CleanAir"></bean>是等效的。除了@Component以外,Spring提供了3個功能基本和@Component等效的註解,它們分別用於對DAO、Service及Web層的Controller進行註解,所以也稱這些註解為Bean的衍型註解:
@Repository:用於對DAO實現類進行標註;
@Service:用於對Service實現類進行標註;
@Controller:用於對Controller實現類進行標註;
那問題來了:既然都是bean,為什麼還提供4個,因為這樣讓註解的用途更加清晰,而且不同的註解也有各自特殊的功能。

三、基於java類提供Bean定義

在普通的POJO類中只要標註@Configuration註解,就可以為spring容器提供bean定義的資訊了,每個標註了@Bean的類方法都相當於提供了一個bean的定義資訊。

package com.demo.model;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConf {
    
    @Bean
    public CleanAir cleanAir(){
       return new CleanAir();    
    }
    @Bean
    public DirtyAir dirtyAir(){
       return new DirtyAir();    
    }
    
    @Bean
    public Person person(){
        return new Person(dirtyAir());
    }
}

我們只需在xml中配置開啟context掃描即可實現bean的配置。省去了配置Person、DirtyAir。

<context:component-scan base-package="com.demo.model"/>
  <bean id="conf" class="com.demo.model.AppConf"/>
       ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"ApplicationContext.xml"});
        BeanFactory factory=context;
        AppConf conf=(AppConf)factory.getBean("conf");
        conf.person().Breath();

輸出結果:
DirtyAir

基於java類的配置方式和基於XML或基於註解的配置方式相比,前者通過程式碼的方式更加靈活地實現了Bean的例項化及Bean之間的裝配,但後面兩者都是通過配置宣告的方式,在靈活性上要稍遜一些,但是配置上要更簡單一些。

相關推薦

Spring Bean配置方式三:註解配置

Spring提供通過掃描類路徑中的特殊註解類來自動註冊Bean定義。同註解驅動事務一樣需要開啟自動掃描並註冊Bean定義支援,使用方式如下(resources/chapter12/ componentDefinitionWithAnnotation.xml): jav

SpringBean配置方式

在部落格中為了演示容器Bean例項化時暴露出的幾個介面,將UserBean配置在XML中,其實常見的Bean的配置有3種。1.基於xml配置Bean 2.使用註解定義Bean 3.基於java類提供Bean定義資訊。 一、基於xml配置Bean 基於XML配置Bean時,Spring通過<bean>

spring通過註解方式配置Bean(一)

(1)元件掃描:spring能夠從classpath下自動掃描、偵測和例項化具有特定註解的元件。 (2)特定元件包括: @Component:基本註解,標識一個受spring管理的元件; @Respority:標識持久層元件; @Service:標識服務層(業務層)元件; @Controller:標識表現層

SpringXML配置Bean的屬性註入

配置 紅色 引用 entry code 轉義 空格 color 文本 Spring中XML文件配置Bean的簡單示例,如下: <bean id="car" class="com.smart.ditype.Car"> <property n

SpringXML配置Bean的屬性注入

    Spring中XML檔案配置Bean的簡單示例,如下: <bean id="car" class="com.smart.ditype.Car"> <property name="color"> <value>紅色&

SpringBean管理------註解方式

編寫測試類 1,編寫相關的類 public interface UserDao { public void sayHello(); } public class UserDaoImpl implements UserDao { @Override public void sayHello() { S

Spring-Example01Spring的Java配置方式

1.原始碼地址 https://gitee.com/gaoxinfu/demo-spring/tree/master/demo-spring-example-01 2.詳細說明 Java配置是Spring4.x推薦的配置方式,可以完全替代xml配置。 2.1. @Config

SSM框架專案搭建系列(四)— Springbean的XML注入方式

在XML中可使用兩種方式進行注入:建構函式注入和setter注入 建構函式注入constructor 直接傳值 applicationContext.xml <bean id="helloworldBeanId" class="com.ssm.b

spring知識三-----SpEL&生命週期&bean配置方式

SpEL—–熟悉 SpEL概述 spring的表示式語言。用在配置檔案中,是一個支援執行時查詢和操作物件圖的強大的表示式語言。他的語法類似於EL表示式。SpEL使用 #{ } 作為定界符,所有在大框號中的字元都將被認為是 SpEL。SpEL 為 bean

mybatis 整合springmapperLocations配置的問題

any 引入 location rop myba 路徑 通過 user configure 今天嘗試spring整合mybatis時遇到這麽一個問題,就是在配置sqlSessionFactory時是否要配置mapperLocations的問題。 <bean i

Spring Bean的裝配

med post java set pac () 構造參數 單元 引用 Spring Bean的裝配分為3中: 1、隱式發現和自動裝配   @Component:將一個Java類聲明為Bean(組件類),等待Spring掃描發現。   @ComponentScan:啟用組件

使用@Configuration註解來代替Springbean配置

ble get new .com 安全 class alt 一個 需要 下面是一個典型的Spring配置文件(application-config.xml): 1 2 3 4 5 6 7 8 <beans> <bean

180611-SpringRedisTemplate配置與使用

env 互操作 else 通過 tid 創建 his valueof rip logo 文章鏈接:https://liuyueyi.github.io/hexblog/2018/06/11/180611-Spring之RedisTemplate配置與使

SpringBoot學習(二)-->Spring的Java配置方式

play sin ext ryu 代碼 容器 技術 測試結果 支持 二、Spring的Java配置方式 Java配置是Spring4.x推薦的配置方式,可以完全替代xml配置。 1、@Configuration 和 @Bean Spring的Java配置方式是通過 @

Spring 基於xml配置方式的AOP(8)

復制 calc owin img add ann frame proc message 1、ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculator

SpringBean的註入

函數的參數 span sta 工廠類 false 介紹 類型 簡單 prope Bean的配置中介紹的是Bean聲明問題,在哪聲明怎麽聲明的問題。Bean的註入是怎麽實例化,怎麽註入的問題。Bean註入的方式有兩種,一種是在XML中配置,另一種則是使用註解的方式註入。 一、

SpringBean的作用域與生命周期

src efi lin 控制 初始化 troy [] 分享 isp 在前面博客中提到容器啟動獲得BeanDefinition對象中有一個scope 屬性。該屬性控制著bean對象的作用域。本章節介紹Bean的作用域及生命周期,了解bean是怎麽來的又怎麽沒的。 一、Bean

Spring Bean 的 Scope

Bean 的 Scope Scope 描述的是 Spring 容器如何新建 Bean  的例項的. Spring 的 Scope 有以下幾種,通過 @Scope 註解來實現. Singleton: 一個 Spring 容器中只有一個 Bena 的例項,此為 Spring

SpringBean的生命周期

web nec connector start jasper dep oca cep table ---恢復內容開始--- Spring中關於Bean的生命周期,我總結的大致過程如下: 1、用戶調用BeanFactory接口的getBean()方法請求一個

SpringBean學習

簡述:Spring框架主要是涉及到IOC(控制反轉)和AOP(切面程式設計)兩大重點 IOC和DI(依賴注入)其實就是等同的意思,就是建立物件和維護物件,放在一個容器裡,直接依賴注入即可使用 AOP的存在目的是為了解耦即高內聚,低耦合 Bean的取值範圍    &nb