English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

基于注解的组件扫描详解

Durante l'uso della scansione dei componenti, è necessario specificare il percorso di scansione nella configurazione XML

<context:component-scan back-package="yangjq.test">

L'istanza del contenitore di Spring scansiona tutti i componenti delle classi nel pacchetto yangjq.test e nei suoi sotto-pacchetti.

Solo quando i componenti delle classi sono definiti con le seguenti annotazioni, queste classi di componenti vengono scansionate nel contenitore di Spring
- @Component annotazione universale
- @Name annotazione universale
- @Repository annotazione componente di livello di persistenza
- @Service annotazione componente di livello di business
- @Controller annotazione componente di livello di controllo

Nominazione

Il processo di scansione dei componenti genera un valore di id predefinito (nome della classe in minuscolo con iniziale minuscola), questo valore di id può anche essere personalizzato nell'annotazione, ad esempio:

//Questo è l'id predefinito, valore OracleUserDao
@Repository
public class OracleUserDao implements UserDao{
}
//Questo è un id personalizzato, valore loginService
@Service("loginService")
public class UserService{
}

Ambito del componente

I componenti gestiti da Spring hanno di default l'ambito "singleton", se necessario un altro ambito, si può usare l'annotazione @Scope, è sufficiente fornire il nome dell'ambito nell'annotazione.

@Scope("prototype")
@Repository
public class OracleUserDao implements UserDao{
}

inizializzazione e distruzione

@PostConstruct e @PreDestroy annotazioni segnano i metodi di callback di inizializzazione e distruzione, ad esempio:

public class ExampleBean{
	@PostConstruct
	  public void init(){
		//.......Inizializzazione
	}
	@PreDestroy
	  public void destroy(){
		//........Distruzione
	}
}

Per le annotazioni di Bean con relazioni di iniezione di dipendenza

Può utilizzare uno dei seguenti per implementare l'iniezione di dipendenza.

- @Resource
- @AutoWired/@Qualifier
- @Inject/@Named

Di solito si utilizza @Resource molto spesso, quindi parliamo di @Resource, gli altri possono cercare ulteriori informazioni quando li utilizzano.
L'annotazione @Resource può essere utilizzata davanti alla definizione del campo o del metodo setter, per impostazione predefinita viene effettuata prima l'iniezione per nome, quindi per tipo.

public class UserSerivce{
	//@Resource  Questo viene utilizzato nella definizione del campo
	private UserDao userDao;
	@Resource  // Questo viene utilizzato davanti al metodo setter
	public void setUserDao(UserDao dao){
		this.UserDao = dao;
	}
}

Quando si verificano più corrispondenze Bean, l'iniezione può generare un errore, è possibile specificare esplicitamente il nome, ad esempio @Resource(name = "exampleDao").

Sommario

Questo è tutto il contenuto dettagliato dell'articolo su come effettuare la scansione dei componenti basata su annotazioni, speriamo che sia utile a tutti. Gli amici interessati possono continuare a consultare altre sezioni correlate di questo sito, e sono benvenuti i commenti per eventuali miglioramenti. Grazie per il supporto degli amici a questo sito!

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una email a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema, fornendo prove pertinenti. Una volta verificata la violazione, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.