`
wzl454823
  • 浏览: 41053 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Bean、消息、事件

阅读更多
Bean的基本管理

BeanFactory
BeanFactory负责读取Bean定义文件:管理对象的加载、生成;维护Bean对象与Bean对象之间的依赖关系;负责它的生命周期。

ApplicationContext
它是基于Beanfactory而建立的。提供一个应用程序所需的更完整的框架功能:
提供更方法地提取资源文件的方法;提供解析文字消息的方法;支持国际化;可以发布事件。
ApplicationContext context = new ClassPathXmlApplicationContext("beans-config.xml");
Business business = (Business) context.getBean("business");

在多个xml文件时可以采用在<beans>中用<import>标签的形式导入,或者用beans*.xml形式使用所有已beans开头的xml。

Bean的识别名称和别名
由于有些文件中的命名规则不一样,所以有些bean需要有一些别名。
<beans...>
    <bean id="app:dataSource" class="...">
    <alias name="app:dataSource" alias="device:dataSource">
    <alias name="app:dataSource" alias="user:dataSource">
//或者<alias name="app:dataSource" alias="device:dataSource,user:dataSource">
</bean>
这样,在特定文件中就可以种特定的别名了。

Bean的实例化
最基本就是在xml里配置<bean>,还有就是建立一个接口,定义类里的静态方法实现接口,在xml配置<bean>中多谢一个 factory-method="方法名"。
scope设置为prototype时,每次取得Bean都是一个新的实例。

Bean的生命周期
如果使用BeanFactory来生成管理Bean,会尽量支持一下的生命周期:
Bean的建立,由Beanfactory读取Bean定义文件,生成各个实例。
属性注入,执行相关的bean属性依赖注入。
执行一些方法。最后在程序结束之前,Bean定义文件上所设置的destroy方法将会执行。
使用getBean方法时菜真正实例化。ApplicationContext则会预先实例化。

Bean定义的继承
加入某个Bean定义中许多属性会有同样的值可以考虑继承。
配置如下:
<bean id="inSomeBean" abstract="true">
<property name="name">
    <value>guest</value>
</property>
<property name="age">
    <value>11</value>
</property>
</bean>
<bean id="some" class="..." parent="inSomeBean">
<property name="name">
    <value>justin</value>
</property>
</bean>
inSomeBean中的age属性将被some继承。

Bean以来设置
Setter的设置不再说,说下Constructor的设置。
首先Bean要有无参和有参的构造方法。
然后再xml中这样配置:
<bean id="helloBean" class="...">
    <constructor-arg index="0">
        <value>justin</value>
    </constructor-arg>
</bean>

依赖的值设置与参考
上例可以简写
<constructor=arg value="justin">

如果属性为null
<property name="name"><null/><property>

如果为“”
<property name="name"><value></value><property>

如果在Bean定义中已经有一个定义的Bean实例,参考某个属性这个实例:
<bean id="helloBean" class="...">
    <constructor-arg>
        <ref bean="date"/>
    </constructor-arg>
</bean>

需要在取得某个Bean钱先实例化别的bean:
<bean id="beanoOne" class="..." depends-on="beanTwo">

自动绑定
分三种情况:
byType,在bean中寻找类型符合的。<bean ....autowire="byType">
byName,查找setXXX,名字相同的。<bean ....autowire="byName">
constructor,查找与构造方法类型相同的。<bean ....autowire="constructor">
autodetect,先尝试constructor,然后尝试byType。

集合对象
数组,list,set,map类型的依赖注入。
数组:
<bean ...>
    <property name="someStrArray">
        <list>
            <value>...</value>
            <value>...</value>
            <ref bean=".."/>
        </list>
    </property>
</bean>
list:
<bean ...>
    <property name="someList">
        <list>
            <value>...</value>
            <value>...</value>
            <ref bean=".."/>
        </list>
    </property>
</bean>
map:
<bean ...>
    <property name="someList">
        <map>
            <entry key="" value=""/>
            <entry key="" ref=""/>
        </map>
    </property>
</bean>
set:
<bean ...>
    <property name="someList">
        <set>
            <value>...</value>
            <value>...</value>
            <ref bean=".."/>
        </set>
    </property>
</bean>

Bean的高级管理

非xml方式的配置
可以用.properties文件配置。
beans-config.properties:
helloBean.(class)=com.johnnyze.HelloBean
helloBean.helloWord=Welcome
SpringDemo:
BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg);
reader.loadBeanDefinitions(new ClassPathResource("beans-config.properties"));
BeanFactory factory = (BeanFactory) reg;
HelloBean hello = (HelloBean) factory.getBean("helloBean");

还可以在程序中直接写出:
//设置属性
MutablePropertyValues properties = new MutablePropertyValues();
properties.addPropertyValue("helloWord","Hello!");
//设置Bean定义
RootBeanDefinition definition = new RootBeanDefinition(HelloBean.class,properties);
//注册Bean定义与Bean别名
BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
reg.registerBeanDefinition("helloBean", definition);


资源、消息、事件

资源
Spring提供了对资源文件的泛型存取。
Resource resource = context.getResource("Classpath:...");

解析文字消息
实现国际化:
beans-config.xml:
<bean id="" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="message"/>
</bean>

messages_en_US.properties:
userLogin=User {0} login at {1}
messages_zh_TW.properties:
userLogin=用户 {0} 于{1} 登陆

SpringDemo.java:
ApplicationContext context = new ClassPathXmlApplicationContext("beans-config.xml");
Object[] arguments = new Object[]{"1",Calendar.getInstance().getTime()};
System.out.println(context.getMessage("userLogin",arguments,Locale.US));
System.out.println(context.getMessage("userLogin",arguments,Locale.TAIWAN));
0
5
分享到:
评论

相关推荐

    ejb 消息驱动Bean例子

    消息驱动Bean(Message Driven Bean,MDB)是EJB的一种特殊类型,它专注于处理消息队列(Queue)或主题(Topic)中的消息,实现异步处理。在本例中,我们将探讨如何使用EJB消息驱动Bean处理Queue和Topic。 1. **...

    消息驱动bean学习

    消息驱动Bean(Message Driven Bean,MDB)是Java EE(Enterprise Edition)平台中的一种特殊类型的Enterprise JavaBean(EJB),主要用于处理消息队列中的消息。MDBs是异步的,这意味着它们不会直接与客户端交互,...

    消息驱动bean EJB 3.0

    **消息驱动Bean (Message Driven Bean, MDB) 是企业级JavaBeans (Enterprise JavaBeans, EJB) 3.0 规范中引入的一种组件模型,主要用于处理异步消息通信。在分布式应用程序中,MDB 提供了一种高效且解耦的方式来处理...

    Spring学习课件

    Bean消息事件.ppt** 这部分深入探讨了Spring中的事件机制。在Spring中,Bean可以通过ApplicationEvent和ApplicationListener接口来发布和监听事件,这有助于组件间的通信。例如,当数据库连接关闭时,可以发布一个...

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

    其他Bean可以通过实现`ApplicationListener`接口来监听这些事件。这是一种有效的组件间通信方式,尤其适用于那些松散耦合的系统组件。 回到我们的项目"SpringJavaProject",它可能包含了一些示例代码,演示了如何...

    JAVA Bean 课程.rar_Java bean

    - **会话Bean**、**实体Bean**和**消息驱动Bean**:EJB定义了三种类型的Bean,分别处理不同的业务需求,如短暂交互、持久化数据和异步通信。 6. **Java Bean 的局限性** - **过于简单**:Java Bean的设计相对基础...

    Spring之核心容器bean

    ApplicationContext则是在BeanFactory基础上扩展,增加了更多企业级服务,如消息处理、国际化、应用事件等。 **Bean的定义与作用** 在Spring中,bean是一个由容器管理的对象,它的实例化、初始化、装配和销毁都是...

    Spring中与Bean相关的接口

    接着,`ApplicationContext`是`BeanFactory`的一个扩展,它添加了更多企业级功能,如消息支持、国际化、事件传播等。`ApplicationContext`通常是我们日常开发中接触最多的Bean容器。它不仅包含`BeanFactory`的功能,...

    Spring中关于Bean的管理的课件

    4. **Spring的应用上下文(ApplicationContext)**:ApplicationContext是Spring的主要接口之一,它提供了获取Bean、处理消息和事件等功能,是Spring应用中的主要入口点。 5. **构造注入(constructor injection)*...

    EJB2和EJB3 消息驱动bean

    ### EJB2与EJB3消息驱动Bean:深入解析与应用 #### 一、EJB2消息驱动Bean ##### 1. **理解消息驱动Bean(MDB)** 消息驱动Bean是Java EE中用于处理异步消息的一种特殊类型的EJB。在EJB2中,MDB主要用于接收来自消息...

    Jboss下开发ejb应用之一消息驱动bean的应用

    其中,消息驱动Bean的设计目标是简化处理离散事件或消息的代码,使开发者能够专注于业务逻辑,而不是底层的消息传递机制。 消息驱动Bean的运作机制是这样的:当接收到一个JMS消息时,容器会自动创建一个MDB实例,...

    Java_Bean教程

    Java Bean通常包含了属性、方法和事件三大部分,使得它们具有良好的封装性和可扩展性。 Java Bean的设计原理基于面向对象的原则,它强调的是代码的重用性和易于理解性。Bean的属性是其内部状态的体现,可以通过...

    Spring Bean 的生命周期.docx

    在ApplicationContext中,Bean的生命周期与BeanFactory基本一致,但ApplicationContext还支持更多高级特性,例如AOP(面向切面编程)和MessageSource(消息源)。 总的来说,Spring Bean的生命周期管理允许开发者...

    EJB3.0开发Message Driven Bean.rar

    EJB 3.0是EJB规范的一个重要版本,它引入了大量简化开发的特性,其中Message Driven Bean(MDB)是一种专门用于处理消息的组件,它简化了企业级应用中的异步处理。 Message Driven Bean 是一种无状态的session bean...

    Spring源码学习四:BeanDefinition装载前奏曲1

    接下来,`initMessageSource()`、`initApplicationEventMulticaster()`分别初始化了消息源和应用事件多播器,提供了国际化支持和事件广播机制。 `onRefresh()`是子类可以覆盖的模板方法,用于执行特定的初始化操作...

    Message-Driven Bean EJB实例源代码

    MDBs作为事件驱动的组件,它们不直接由客户端调用,而是通过消息系统触发执行。 3. **JMS(Java Message Service)**: JMS是Java平台的标准API,用于在分布式环境中创建、发送、接收和读取消息。它定义了两种消息...

    Spring创建Bean的过程

    ResourceBundleMessageSource 是最常用的 MessageSource 实现,它可以从资源束中加载消息。 资源访问 ApplicationContext 继承了 ResourceLoader 接口,提供了 getResource() 方法,该方法可以根据资源的位置返回...

    java源码:Message-Driven Bean EJB实例源代码.zip

    Message-Driven Bean是一种无状态的会话Bean,它通过接收和处理JMS消息来响应业务事件。MDB是异步的,这意味着它们在接收到消息时不会阻塞调用线程,而是由JMS提供程序在后台处理。这种设计使得应用程序能够处理大量...

    JMS(Java Massage Service)与MDB(Massage Driver Bean)

    5. **MDB(Message Driven Bean)**: MDB是Java EE中的一种特殊类型的Enterprise JavaBean(EJB),专门设计用来处理JMS消息。MDB充当了消息消费者的角色,它们在后台自动监听消息队列或主题,当有新消息到达时,会...

    谈谈我对Spring Bean 生命周期的理解

    BeanFactory 提供了基本的依赖注入支持,而 ApplicationContext 则在继承 BeanFactory 的基础上增加了事件传播、资源访问和国际化的消息访问等功能。 五、 Spring Bean 生命周期的实现 在 Spring 中,Bean 的生命...

Global site tag (gtag.js) - Google Analytics