`
Surlymo
  • 浏览: 97200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用listener和beanfactoryaware实现bean的动态装载

阅读更多

首先,写一个类,继承Beanfactoryaware

public class SpringBeanAware implements BeanFactoryAware {

    public static BeanFactory beanFactory;

    public void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }
    public static Object getBean(String name) {
        return beanFactory.getBean(name);
    }

    public static <T> T getBean(String name, Class<T> clazz) {
        return (T)beanFactory.getBean(name);
    }

    public static boolean containsBean(String name) {
        return beanFactory.containsBean(name);
    }
}


然后再spring的xml中声明:

<bean id="springBeanAware"
		class="com.iris.listener.SpringBeanAware" />


再次,在web.xml中声明监听器:
	<listener>
		<listener-class>
			com.iris.listener.IrisSedaDispatcher
		</listener-class>
	</listener>


注意:此处如果使用的是spring mvc3,切不可图省事把所有spring配置都和mvc配置放一起,那样将导致监听不到(除非你想加载两次配置~)


监听器的代码如下:

public class IrisSedaDispatcher implements ServletContextListener {
	private ServletContext context = null;

	public void contextDestroyed(ServletContextEvent event) {
		// Output a simple message to the server's console
		System.out.println("The Simple Web App. Has Been Removed");
		this.context = null;
	}

	public void contextInitialized(ServletContextEvent event) {
		this.context = event.getServletContext();
		System.out.println("启动好了我勒个去");

		DefaultListableBeanFactory beanregistry = (DefaultListableBeanFactory) SpringBeanAware.beanFactory;

		System.out.println("关注factory:" + beanregistry);

		 RootBeanDefinition define = new RootBeanDefinition(User.class);
		 PropertyValue username = new PropertyValue("username", "hellokitty");
		 MutablePropertyValues values = new
		 MutablePropertyValues(Arrays.asList(username));
		 define.setPropertyValues(values);
		
		 define.setScope(BeanDefinition.SCOPE_SINGLETON);
		 define.setAutowireCandidate(true);
		 beanregistry.registerBeanDefinition("usertest", define);
		 System.out.println((User) beanregistry.getBean("usertest"));
		 System.out.println("初始化好了");
    }
}


然后,你就可以再程序中按如下方法获取到你新注册的bean了:

System.out.println(SpringBeanAware.getBean("statisticsMessageProducer"));


以上。备忘。

注意:以上方法只能用来注册普通的bean,你如果想注册个jms的listener、listenercontain、queue什么的,那么还是放弃吧,除非你想把spring的解析这些东西的源码再写一遍。我就是这么搞了一天最后才发现自己就是个蛋。算吸取教训了。
0
0
分享到:
评论

相关推荐

    spring运行过程中动态注册bean

    在实际开发中,我们往往需要在应用启动后动态注册Bean,这时候可以利用`BeanFactoryAware`接口和`ApplicationListener`接口。`BeanFactoryAware`接口使得Bean可以被注入`BeanFactory`,而`ApplicationListener`接口...

    消息队列监听器无法注入bean的问题解决

    在Spring框架中,监听器通常通过实现`MessageListener`接口或者使用`@RabbitListener`注解来定义。如果这个类中的bean无法被正确地注入,那么可能是由于配置问题或者依赖注入机制出现了故障。 `BeanUtil.java`可能...

    C#Winform使用TCPListener加多线程编程实现客户端服务器端聊天模式

    本文将深入探讨如何使用C#的Winform框架结合TCPListener和TCPClient,以及多线程技术,实现客户端与服务器端的聊天模式。此外,我们还将讨论如何通过委托来解决在非UI线程中操作控件时可能引发的异常。 首先,TCP...

    JMS与Spring之二(用message listener container异步收发消息)

    JMS与Spring之二(用message listener container异步收发消息) ...通过了解 message listener container 的构成部分和配置方法,我们可以更好地使用 message listener container 实现异步消息监听。

    C#,winform,Tcp通信源码 使用TcpListener和TcpClient 源码

    在.NET框架中,C#语言提供了丰富的网络编程接口,其中包括TcpListener和TcpClient类,这两个类是用于实现基于TCP协议的客户端与服务器端通信的核心组件。本篇文章将深入探讨这两个类的工作原理、如何使用以及相关的...

    TcpListener 和TcpClient使用总结

    ### TcpListener 和 TcpClient 使用总结 #### 一、概述 在C#的.NET框架中,TCP...总之,通过合理地使用 **TcpListener** 和 **TcpClient** 类,可以在C#中轻松地实现TCP/IP通信,这对于开发网络应用程序至关重要。

    SpringBoot整合Listener的两种方式.docx

    1. **创建Listener类**:首先,你需要创建一个类并实现`ServletContextListener`接口。这个接口提供了两个方法:`contextInitialized()`和`contextDestroyed()`,分别在Servlet容器启动和关闭时被调用。 ```java ...

    Unity 网络 之 TcpListener 实现简单的网络服务器和客户端通讯功能封装(可监听多个客户端).rar

    Unity 网络 之 TcpListener 实现简单的网络服务器和客户端通讯功能封装(可监听多个客户端) 在Unity中用 TcpClient、TcpListener 两个封装类和 NetworkStream 来实现一个简单的网络通讯 demo 实现原理 1、首先...

    基于tcplistener和tcpclient的一对多通讯原型

    本知识点主要关注如何使用C#中的`TcpListener`和`TcpClient`类实现一对多的通讯原型,这将帮助初学者理解如何构建简单的网络通信系统。 首先,`TcpListener`是.NET Framework中用于监听TCP连接的类。它的工作原理是...

    杂记(一):Listener、Filter和工具

    Listener帮助我们实现事件驱动的编程,Filter确保数据在传输过程中的安全性和一致性,而工具则提升了开发效率和质量。理解并熟练掌握这些概念,对于成为一个高效的Java Web开发者至关重要。在学习和实践中,不断探索...

    TcpListener异步通信

    本文将深入探讨如何使用C#实现一个简单的TcpListener来支持异步通信,允许多客户端同时连接。 首先,我们需要理解TcpListener类在C#中的作用。TcpListener是.NET Framework提供的一个类,用于监听特定IP地址和端口...

    listener我的listener listener我的listener

    在IT行业中,Listener是一个非常关键的概念,特别是在Java和Web开发领域。Listener是一种接口或类,它们用于监听特定事件的发生,并在这些事件发生时执行相应的处理逻辑。标题中的"listener我的listener listener我...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    回到我们的项目"SpringJavaProject",它可能包含了一些示例代码,演示了如何配置和使用ApplicationContext来实现国际化和事件传递。例如,我们可能会有一个`MessageSource`配置,用于加载资源束,以及一个或多个`...

    c# socket 、TCPClient、TCPListener 用法详解.doc

    使用 Socket,可以实现网络编程的基本操作,如连接、发送和接收数据。例如: ```csharp Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Connect("www.example.com", ...

    TcpListener 监听服务端

    由于 TcpListener 默认只能处理一个连接请求,要支持多客户端连接,我们需要在一个新的线程或者使用异步编程模型(如 `BeginAcceptTcpClient` 和 `EndAcceptTcpClient` 方法)来处理每个连接请求,以免阻塞其他...

    Spring如何获取Bean

    我们可以在 XML 配置文件中定义 Bean,然后使用 FileSystemXmlApplicationContext 或 WebApplicationContextUtil 来获取 ApplicationContext,最后使用 getBean() 方法来获取我们要的 Bean。 例如,我们可以在 XML ...

    Filter和Listener

    尽管Filter和Listener都可以在Web应用中扩展功能,但它们的作用范围和使用场景有所不同: - **作用时机**:Filter是在请求和响应过程中发挥作用,而Listener则是在特定事件(如应用启动、会话变化)时触发。 - **...

    让spring解决控制springboot中bean的加载顺序的问题.docx

    @Order主要用于控制切面(@Aspect)、ApplicationListener和CommandLineRunner的加载顺序,而不是普通Bean。对于单例Bean,它们的加载顺序通常由依赖关系和@DependsOn声明决定。 3. 如何控制Bean的加载顺序 3.1 @...

    基于C# 的TcpClient/TcpListener的一对多的网络通信程序源码

    TcpListener则用在服务器端,监听特定IP地址和端口上的连接请求。它使用Start()方法启动监听,AcceptTcpClient()方法用于接收客户端的连接请求。一旦有新的连接,就会返回一个新的TcpClient对象,服务器可以与这个...

    ejb状态bean和消息bean的源代码

    状态Bean和消息Bean在实际应用中常常结合使用。例如,一个在线购物系统可能使用状态Bean来跟踪用户的购物车状态,而消息Bean则用于处理后台的订单处理流程,如库存检查、发货通知等。通过这种方式,状态Bean负责与...

Global site tag (gtag.js) - Google Analytics