`
wzl454823
  • 浏览: 39915 次
  • 性别: 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
分享到:
评论

相关推荐

    spring技术手册demo

    spring入门,bean消息事件,spring-aop,jdbc支持,hibernate与spring

    大厂真题之百度-Java中级

    BeanFactory 和 ApplicationContext 有什么区别 &gt; BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义, 以便在接收到客户端请求时将对应的 bean ...&gt; 已在监听器中注册的 bean 的事件

    java微信公众号MVC开发框架

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...

    J2EE中文版指南 CHM格式 带全文检索

    第7章 一个消息驱动Bean的例子 122 一.例子应用程序介绍 122 二.J2EE应用程序客户端 123 三.消息驱动Bean类 124 OnMessage方法 124 ejbCreate和ejbRemove方法 125 四.运行本例子 125 启动J2EE服务器 125 创建...

    WSAD环境下JMS异步通信全攻略

     为了支持异步通信,J2EE 1.3规范还引入了一种新的EJB类型:消息驱动的Bean,即Message Driven Bean,简称MDB。如前所述,在JMS之前,J2EE原来是一个建立在Java RMI-IIOP通信协议基础上的同步环境,但MDB却具有接收...

    Spring in Action(第二版 中文高清版).part2

    3.5.5 程序事件的解耦 3.5.6 让Bean了解容器 3.6 脚本化的Bean 3.6.1 给椰子上Lime 3.6.2 脚本化Bean 3.6.3 注入脚本化Bean的属性 3.6.4 刷新脚本化Bean 3.6.5 编写内嵌的脚本化Bean 3.7 小结 第4章 通知...

    Spring in Action(第二版 中文高清版).part1

    3.5.5 程序事件的解耦 3.5.6 让Bean了解容器 3.6 脚本化的Bean 3.6.1 给椰子上Lime 3.6.2 脚本化Bean 3.6.3 注入脚本化Bean的属性 3.6.4 刷新脚本化Bean 3.6.5 编写内嵌的脚本化Bean 3.7 小结 第4章 通知...

    Spring in Action(第2版)中文版

    3.5.5程序事件的解耦 3.5.6让bean了解容器 3.6脚本化的bean 3.6.1给椰子上lime 3.6.2脚本化bean 3.6.3注入脚本化bean的属性 3.6.4刷新脚本化bean 3.6.5编写内嵌的脚本化bean 3.7小结 第4章通知bean 4.1aop...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    9.2 使用消息驱动Bean 349 9.2.1 使用@MessageDriven和@ActivationConfigProperty 350 9.2.2 实现MessageListener 352 9.2.3 MDB的生命周期 353 9.2.4 MDB中的依赖注入 356 9.2.5 事务管理和异常处理 359 9.3 使用...

    spring2.0技术手册.PDF

    spring2.0技术手册,spring入门,bean/消息/事件以及JDBC等等

    aws-elastic-beanstalk-worker-spring-boot-spring-batch-template:这是托管在AWS上的批处理应用程序

    编辑S3存储桶的属性,以生成由Elastic Beanstalk创建的SQS队列的ObjectCreadted(All)事件(请勿选择名称中带有“ Dead”的队列) 将文件上传到您的S3存储桶 检查日志,您应该看到打印输出 参考 玩得开心 :)

    WicketCDI_Test:Wicket + CDI + WebSockets 用例测试

    label1 - 按钮按下后的启动消息 label2 - bean 停止工作负载后的停止消息 CDI Async - 启动带有 Future 的异步 bean 返回 UI 停止事件 Executor - 使用 ExecutorService 启动 bean,结束事件是推送消息到 ...

    spring2.0技术手册 (扫描版)

    第3章Bean、消息、事件 第4章SpringAOP 第5章JDBC、事务支持 第6章Hibernate与Spring 第7章SpringWebMVC框架 第8章View层方案、Web框架整合 第9章API封装 第10章项目:Spring在线书签 Spring Framework 是一...

    Spring面试题[更多最新精品www.cx1314.cn]1

    1. 构造器注入 3. 接口注入 1. 提供了支持国际化的文本消息 2. 统一的资源文件读取方式 3. 已在监听器中注册的 bean 的事件 4.Annotat

    Spring面试专题及答案整理1

    1. 构造器注入 3. 接口注入 1. 提供了支持国际化的文本消息 2. 统一的资源文件读取方式 3. 已在监听器中注册的 bean 的事件 1. Applic

    咕泡学院_Tom_JavaVIP课程_Spring面试宝典1

    1.构造器注入 3.接口注入 1.提供了支持国际化的文本消息 2.统一的资源文件读取方式 3.已在监听器中注册的 bean 的事件 1.基于 XML 的配置 2

    spring in action英文版

     6.3.2 用Hessian或Burlap公开Bean的功能  6.4 使用HTTP invoker  6.4.1 通过HTTP访问服务  6.4.2 把Bean作为HTTP服务公开  6.5 使用EJB  6.5.1 访问EJB  6.5.2 用Spring开发EJB  6.6 使用...

    spring2.0技术手册

    本书内容全面深入,主要包括spring入门、bean/消息/事件、spring aop、jdbc/事物支持、spring与hibernate的整合、spring web mvc框架、view 层方案/web框架整合、api封装、spring在线书签完整项目示例等内容。

    Spring2.0技术手册

    \r\n 本书内容全面深入,主要包括Spring入门、Bean/消息/事件、Spring AOP、JDBC/事物支持、Spring与Hibernate的整合、Spring Web MVC框架、View 层方案/Web框架整合、API封装、Spring在线书签完整项目示例等内容。

Global site tag (gtag.js) - Google Analytics