Spring註解開發(一)元件註冊

2021-09-27 07:37:05 字數 4794 閱讀 4750

spring元件註冊就是讓spring的ioc容器去管理元件的這個bean,

spring元件基於註解的註冊方法主要有以下幾種:

首先需要乙個@configuration註解的配置類,告訴spring容器配置的入口,和xml配置檔案的功能一樣

首先新建乙個person類,屬性為string:name,integer:age;

新建配置類,**如下:

@configuration//表示當前類為乙個配置類

public class mainconfig01

}

測試類如下:

@test

public void test01()

}

列印出來容器中的元件除了spring本身自帶的還有這兩個: mainconfig01  person

@bean預設beandefinitionname為方法名,也可以指定@bean("alen")@bean 和xml檔案配置中的標籤一致,也可以指定以下屬性

2.1.預設為單例模式,scope可以指定單例還是多例,單例預設在容器建立是建立元件並放入容器,多例則在獲取時建立

2.2指定init-method和destory-method,單例下bean的生命週期交給容器管理,init-method和destory-method都會執行,多例下只     會執行destory-method

2.3.@lazy註解,元件會在容器獲取時初始化建立。

在@componentscan註解中,

1.缺省會自動掃瞄以下四個註解註解的元件

/**

* indicates whether automatic detection of classes annotated with

* , , or should be enabled.

*/boolean usedefaultfilters() default true;

2.標籤值為@filter的兩個過濾器

filter excludefilters() default {};//排除

filter includefilters() default {};//包含

值為@filter,預設的過濾型別為註解格式,

/**

* the type of filter to use.

* default is .

* @see #classes

* @see #pattern

*/filtertype type() default filtertype.annotation;

在filter type列舉型別中還有其他幾個格式

public enum filtertype
按照自定義的規則

implementation.
我們需要去實現typefilter介面,舉個例子,**如下:

public class myflitertype implements typefilter 

return false;

}}

配置類如下:

@configuration

@componentscan(value = "com.practice.bean")

public class mainconfig01

}

測試類:

@test

public void test02()

}

結果為:

org.springframework.context.annotation.internalconfigurationannotationprocessor

org.springframework.context.annotation.internalautowiredannotationprocessor

org.springframework.context.annotation.internalcommonannotationprocessor

org.springframework.context.event.internaleventlistenerprocessor

org.springframework.context.event.internaleventlistene***ctory

mainconfig01

controllerdemo

daodemo

servicedemo

person

includefilters此處不再講解,需要將usedefaultfilters = false置為false,因為預設開啟會掃瞄componernt四個註解。

自定義乙個條件,需要實現condition類,**如下

public class mycondition implements condition 

return false;

}}

此類的意思是在作業系統在windows環境下則載入

在掃瞄的com.practice.bean包中加了@component註解的某個類上加上@conditional(value = mycondition.class)註解

我們將啟動引數改為-dos.name=linux,則此元件將不會再被註冊。

1. 直接匯入

在bean的包下先建乙個 myimport類,我們將此註解@import(value = )加在我們的主配置類上,執行測試類,

可以看到,輸出的元件中包含了該類的全類名(預設id為全類名)。

2.importselector:匯入元件選擇器,

2.1實現介面importselector:

public class myimportselector implements importselector ;

}}

配置類註解@import(value = ),執行測試類,可以看到myimport元件已註冊

2.2importbeandefinitionregistrar:匯入元件定義註冊器

作用:實現importbeandefinitionregistrar介面,我們可以為容器註冊元件。

新建importbeandefinitionregistrartest類以做測試:

public class importbeandefinitionregistrartest
新建myimportbeandefinitionregistrar類,為容器註冊importbeandefinitionregistrartest類的bean定義資訊,匯入該元件。

**如下:

public class myimportbeandefinitionregistrar implements importbeandefinitionregistrar 

}

配置類註解改為@import(value = ),執行測試類,可以看到importbeandefinitionregistrartest元件已註冊。

factorybean實現類如下:

public class myfactorybean implements factorybean

@override

public class<?> getobjecttype()

}

配置類修改為

@configuration

@componentscan(value = "com.practice.bean")

public class mainconfig01

}

執行測試類,可以看到myfactorybean已被註冊。那麼這個myfactorybean就是myfactorybean類嗎?

我們在測試類中加上:

system.out.println(bean);

列印出的bean為com.practice.bean.person類,說明person已被註冊到容器中。

那麼怎麼獲取這個myfactorybean類元件呢,使用&符號,原始碼中已給出說明。

/**

* used to dereference a instance and distinguish it from

* beans created by the factorybean. for example, if the bean named

* is a factorybean, getting

* will return the factory, not the instance returned by the factory.

*/string factory_bean_prefix = "&";

列印bean.getclass.console顯示class com.practice.bean.myfactorybean。

Spring註解(一) 元件註解

1 configuration 告訴spring這是乙個配置類 2 bean 給容器中註冊乙個bean 型別為返回值的型別,id預設是用方法名作為id 預設是單例項 3 componentscan 包掃瞄,自動把 controller service repository component下的元件...

spring整理(一)元件整合

簡單來說,spring 框架是乙個分層架構,由 7 個定義良好的模組組成的輕量級開源框架。spring模組構建在核心容器之上,核心容器定義了建立 配置和管理 bean 的方式,它是乙個基於ioc di和aop的構架多層j2ee系統的框架。可以說spring是企業應用開發的 一站式 選擇,並貫穿表現層...

Spring註解開發 一

註解開發 將xml格式的配置,按照annotation改寫增強 依賴 org.springframework spring context 5.0.2.release junit junit 4.12 test 什麼都不做,無自定義的bean 使用註解 package cn.config impor...