¿Cómo hacer que las clases que no son administradas por resorte tengan la característica de inyección automática por resorte?
Paquete spring.core;
Importar Java.io.
Importar Java .io .inputstreamreader
Importar org . >Importar org.spring framework.beans.factory.annotation.autowired;
Importar org.spring framework.beans.factory.annotation.qualifier;
Importar org.spring framework. .factory.config.autowirecapablebeanfactory;
Importar evento org.spring framework.context.application;
importar org.spring framework.context.applicationeventpublisher;
Importar org. marco de primavera. contexto de aplicación de anotación.
Importar org.spring framework.context.annotation.bean;
Importar org.spring framework.context.annotation.configuration;
/**
*¿Cómo hacer que las clases que no son administradas por resorte tengan la característica de inyección automática por resorte?
*Ejemplo: modo de configuración java
* @authorPh.D.
*
* @Time 2014 65438 + la tarde de 3 de febrero 4:04:44.
*/
Patrón de observador de clase pública conpspringevents {
@conexión automática
@Qualifier("messageEventSource ")
fuente de evento de mensaje privado fuente de evento de mensaje;
Contexto privado AnnotationConfigApplicationContext;
@test
Prueba de anulación pública() arroja Throwable{
context = new AnnotationConfigApplicationContext(observerpatternwithsspringeventsconfigure . class);
//AutowireCapableBeanFactory tiene los siguientes métodos importantes para permitir que las clases que no son administradas por Spring tengan la característica de inyección automática de Spring.
context.getautowirecapablebeanfactory(). autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, true);
Hilo = nuevo hilo (messageEventSource);
thread.start();
thread.join ();
}
@Configuration
Patrón de observador de clase estática pública conpspringeventsconfigure {
@Bean(name="messageEventSource ") p>
fuente de evento de mensaje público fuente de evento de mensaje(){
Devolver nuevo MessageEventSource();
}
@Bean(name=" messageListener ")
Escucha de mensajes públicos messageListener(){
Devolver escucha de mensajes nuevos();
}
}
La clase estática pública MessageEvent extiende ApplicationEvent{
privada estática final larga serialVersionUID = 4927935382440103532 l;
Cadena privada mensaje = " ";
public MessageEvent( fuente del objeto, mensaje de cadena){
super(fuente);
if (!StringUtils.isBlank(message)) {
this .message = mensaje
}
}
@override
cadena pública toString(){
StringBuilder StringBuilder = new StringBuilder( );
stringbuilder append(" evento de mensaje[mensaje = "). agregar (mensaje).
Append("]");
Devuelve stringbuilder.tostring();
}
}
/**
*Implemente la interfaz ApplicationEventPublisherAware para permitir que Spring inyecte ApplicationEventPublisher.
*Es la fuente de los eventos de distribución de Spring.
* @authordoctoral
*
* 2014 12.4 22:52:18
*/
La clase estática pública MessageEventSource implementa Runnable, ApplicationEventPublisherAware {
Private ApplicationEventPublisher ApplicationEventPublisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher ApplicationEventPublisher){
this . applicationEventPublisher = applicationEventPublisher;
}
@override
public void run(){
lector almacenado en búfer = nuevo almacenado en búfer lector(nuevo InputStreamReader(sistema . in));
prueba {
mientras (verdadero) {
cadena readLine = lector . p>
//Evento de publicación
applicationeventpublisher. evento de publicación (evento de nuevo mensaje (este, Thread.currentThread().getName()+"-"+readLine));
}
} captura (IOException e) {
e .
}
}
.}
La clase estática pública MessageListener implementa ApplicationListener & ltMessageEvent & gt{
@Override
Anulación pública en evento de aplicación (evento de evento de mensaje){
sistema . println(hilo . hilo actual().getName()+evento
}
}
}