- 浏览: 161483 次
- 来自: ...
文章分类
- 全部博客 (110)
- 网络 (3)
- window (1)
- eclipse (2)
- mysql (3)
- java (43)
- spring (2)
- memcahe (4)
- kestrel (1)
- linux (19)
- maven (1)
- 总结 (1)
- ActiveMQ (1)
- 线程 (6)
- nio (7)
- java pool (1)
- IO (1)
- 架构 (1)
- Hadoop (1)
- Storm (1)
- zookeeper (3)
- 工作进程 (1)
- epoll (3)
- nginx (4)
- uml (1)
- 分布式 (1)
- RMI (4)
- redis (1)
- shell (4)
- 黄金文档 (1)
- office (2)
- linux_setup (1)
- visio (1)
- BIOS (1)
- 回调 (1)
- jvm (1)
- resin (1)
- ssd (0)
- xmpp (1)
最新评论
-
qxjandyc:
hjjjjjjjjjjjjjjjjjjjjjj
(emoji表情) unicode5与unicode6互换 -
一个人旅行:
写的不错哦
(emoji表情) unicode5与unicode6互换
1、
2、Spring的InitializingBean和init-method
Spring的InitializingBean和init-method
Spring在设置完一个bean所有的属性后,会检查bean是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法。另外,如果bean是单例的,则afterPropertiesSet方法只会被调用一次;否则每次创建bean时afterPropertiesSet方法都会被重新调用.
Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调,但是这种方式要求bean实现 InitializingBean接口。一但bean实现了InitializingBean接口,那么这个bean的代码就和Spring耦合到一起了。通常情况下不建议直接实现InitializingBean,而是用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法,这可以在一个bean的配置文件中通过init-method声明:
<bean id="testBean" class="TestClass" init-method="initialize"/>
spring要求这个init-method方法是一个无参数的方法
如果一个bean同时实现了这两种方式的初始化配置,则spring会先调用afterPropertiesSet方法,然后通过反射调用init-method,任何一个方法出错都会导致spring创建bean失败.如果afterPropertiesSet方法调用失败,也不会再继续执行init-mehtod方法.
init-method属性用于指定自定义初始化方法
---------------------------------
引用配置文件的值
<!-- cache.properties中定义memcache.cache_prefix=sns\:2\: -->
<bean id="globalCacheManager" class="com.xiaonei.wap.framework.cache.GlobalCacheManager">
<property name="memCacheManager" ref="memCacheManger" />
<property name="cachePrefix" value="${memcache.cache_prefix}" />
</bean>
spring提供了很多*aware接口,比较常用的就是BeanFactoryAware,ApplicationContextAware,BeanNameAware
实现这些接口的Bean则能获得相应的BeanFactory,ApplicationContext实例,从而能直接获得容器信息。
3、FactoryBean接口作用就是封装自己定制的实例化逻辑(例如你想用工厂模式来实例化,或者Class.getInstance()),然后让spring统一管理。
http://fuhuijun.iteye.com/blog/1260609
http://readwall.blog.163.com/blog/static/10127132201042751036331
FactoryBean 用于在 spring 容器中创建其他的 Bean, 我们平时用得最多的 JndiObjectFactoryBean, hibernate 的 LocalSessionFactoryBean 都是 FactoryBean 的具体实现, 既然如此, 读取动态配置就变得易如反掌了, 假如我们要实现动态读取数据库配置的功能, 拿使用率最高的 BasicDatasource 为例, 简单的实现一个 BasicDatasource FactoryBean 如下即可
代码
public class BasicDataSourceFactoryBean implements FactoryBean {
public Object getObject() throws Exception {
BasicDataSource dataSource = new BasicDataSource();
// 读取外部配置, 设置到 dataSource 中 ...
return dataSource;
}
public Class getObjectType() {
return BasicDataSource.class;
}
public boolean isSingleton() {
return true;
}
}
然后在 spring 中如此声明
<bean id="dataSource" class="BasicDataSourceFactoryBean ">
... 你的配置来源
</bean>
4、BeanPostProcessor,BeanFactoryPostProcessor接口都是容器扩展点,容许spring在bean初始化或者销毁的时候回调,回调顺序可以用order来指定,前提是必须执行Ordered接口。
package spring.beansandcontext; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; //如果被装配的Bean实现了相应的接口,就可以在Bean中获得相应的信息。,或者进行某些操作。 public class HelloServiceImpl implements HelloService, //以下同时为接口的调用的顺序 BeanNameAware,//获得Bean名,也就是<Bean>标签的id属性值。 BeanClassLoaderAware,//获得装载过程中的ClassLoader对象。 BeanFactoryAware,//获得BeanFactory对象 ApplicationContextAware,//获得ApplicationContext对象 InitializingBean, //在Bean的所有属性设置完后,并且在调用完上面接口的方法后,调用此接口的afterPropertiesSet方法 DisposableBean //当销毁Bean时,调用此接口的destroy方法 { private String greeting; public String getGreeting() { // TODO Auto-generated method stub return "hello " + greeting; } // 以下同时为方法的调用的顺序 public void setGreeting(String greeting) { this.greeting = greeting; System.out.println("setGreeting 设置greeting属性值"); } public void setBeanName(String name) { System.out.println("BeanNameAware 接口方法 获得Bean名,也就是<Bean>标签的id属性值:" + name); } public void setBeanClassLoader(ClassLoader arg0) { System.out.println("BeanClassLoaderAware接口方法 获得装载过程中的ClassLoader对象:" + arg0); } public void setBeanFactory(BeanFactory arg0) throws BeansException { System.out.println("BeanFactoryAware接口方法 获得BeanFactory对象:" + arg0); } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("ApplicationContextAware接口方法 获得ApplicationContext对象:" + applicationContext); } public void afterPropertiesSet() throws Exception { System.out.println("InitializingBean接口方法 afterPropertiesSet"); } public void initMethod() { System.out.println("<bean>标签的init-Method属性指定的方法,此方法在afterPropertiesSet()之后调用"); } public void destroy() throws Exception { System.out.println("DisposableBean 接口方法 destroy"); } public void destroyMethod() { System.out.println("<bean>标签的destroy-Method属性指定的方法,此方法在destroy()之后调用"); } }
2、Spring的InitializingBean和init-method
Spring的InitializingBean和init-method
Spring在设置完一个bean所有的属性后,会检查bean是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法。另外,如果bean是单例的,则afterPropertiesSet方法只会被调用一次;否则每次创建bean时afterPropertiesSet方法都会被重新调用.
Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调,但是这种方式要求bean实现 InitializingBean接口。一但bean实现了InitializingBean接口,那么这个bean的代码就和Spring耦合到一起了。通常情况下不建议直接实现InitializingBean,而是用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法,这可以在一个bean的配置文件中通过init-method声明:
<bean id="testBean" class="TestClass" init-method="initialize"/>
spring要求这个init-method方法是一个无参数的方法
如果一个bean同时实现了这两种方式的初始化配置,则spring会先调用afterPropertiesSet方法,然后通过反射调用init-method,任何一个方法出错都会导致spring创建bean失败.如果afterPropertiesSet方法调用失败,也不会再继续执行init-mehtod方法.
init-method属性用于指定自定义初始化方法
---------------------------------
引用配置文件的值
<!-- cache.properties中定义memcache.cache_prefix=sns\:2\: -->
<bean id="globalCacheManager" class="com.xiaonei.wap.framework.cache.GlobalCacheManager">
<property name="memCacheManager" ref="memCacheManger" />
<property name="cachePrefix" value="${memcache.cache_prefix}" />
</bean>
spring提供了很多*aware接口,比较常用的就是BeanFactoryAware,ApplicationContextAware,BeanNameAware
实现这些接口的Bean则能获得相应的BeanFactory,ApplicationContext实例,从而能直接获得容器信息。
3、FactoryBean接口作用就是封装自己定制的实例化逻辑(例如你想用工厂模式来实例化,或者Class.getInstance()),然后让spring统一管理。
http://fuhuijun.iteye.com/blog/1260609
http://readwall.blog.163.com/blog/static/10127132201042751036331
FactoryBean 用于在 spring 容器中创建其他的 Bean, 我们平时用得最多的 JndiObjectFactoryBean, hibernate 的 LocalSessionFactoryBean 都是 FactoryBean 的具体实现, 既然如此, 读取动态配置就变得易如反掌了, 假如我们要实现动态读取数据库配置的功能, 拿使用率最高的 BasicDatasource 为例, 简单的实现一个 BasicDatasource FactoryBean 如下即可
代码
public class BasicDataSourceFactoryBean implements FactoryBean {
public Object getObject() throws Exception {
BasicDataSource dataSource = new BasicDataSource();
// 读取外部配置, 设置到 dataSource 中 ...
return dataSource;
}
public Class getObjectType() {
return BasicDataSource.class;
}
public boolean isSingleton() {
return true;
}
}
然后在 spring 中如此声明
<bean id="dataSource" class="BasicDataSourceFactoryBean ">
... 你的配置来源
</bean>
4、BeanPostProcessor,BeanFactoryPostProcessor接口都是容器扩展点,容许spring在bean初始化或者销毁的时候回调,回调顺序可以用order来指定,前提是必须执行Ordered接口。
发表评论
-
java final关键字
2012-10-21 21:20 1049Java中的final关键字通常的指的是“这是无法改变的”。它 ... -
Java:List中的toArray()的使用方法
2012-10-16 17:15 1065http://webservices.ctocio.com.c ... -
jvm 参数设置 -D
2012-10-16 14:06 9451、log4j 配置文件 -Dlog4j.configurat ... -
Java核心技术(第8版) – 读书笔记
2012-09-03 15:15 788http://www.coder4.com/archives/ ... -
线程123总结
2012-09-02 22:34 772线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一 ... -
Arraylist与linkedlist的区别
2012-08-31 16:44 764List: 有顺序的,元素可以重复 遍历:for 迭代 排 ... -
Java RMI之HelloWorld篇
2012-08-29 11:53 584http://www.cnblogs.com/ninahan0 ... -
Comparator和Comparable在排序中 区别
2012-08-21 09:40 743当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用C ... -
关系 UML 说明
2012-08-01 22:56 776关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等 ... -
replace和replaceAll 区别
2012-08-01 14:59 812replace和replaceAll是JAVA中常用的替换字符 ... -
JAVA ANNOTATION详解
2012-08-01 14:56 748http://www.cnblogs.com/phoebus0 ... -
Java中的Enum用法介绍
2012-07-27 09:39 983http://blog.sina.com.cn/s/blog_ ... -
获取本地ip
2012-07-26 09:09 891/** * @Title: getLocalIp ... -
动态代理
2012-07-25 10:29 718http://blog.csdn.net/cz_hyf/art ... -
NIO揭秘-1
2012-07-24 11:15 715http://my.oschina.net/zhangya/b ... -
FileChannel类的简单用法
2012-07-23 20:12 888http://blog.163.com/yf_198407/b ... -
JDK5.0 新特性
2012-07-23 17:30 7521.AutoBoxing 原来int是非Object,在JDK ... -
java jdk5 新特性 Annotation(注释)
2012-07-23 17:29 831http://www.iteye.com/topic/1653 ... -
java jdk5 新特性 可变参数
2012-07-23 17:28 695java jdk5 的新特性:可变参数 Java代码 ... -
java泛型
2012-07-22 22:25 799http://www.cnblogs.com/panjun-D ...
相关推荐
在Spring框架中,`Spring-Aware`接口是一个重要的概念,它允许我们与Spring的应用上下文(ApplicationContext)进行交互,从而获取或操作由Spring管理的Bean。`ApplicationContextAware`是其中的一个典型接口,当...
这些接口允许Bean获取容器的相关信息,如Bean的名称、类加载器、Bean工厂等。 - InitializingBean:对应初始化阶段,它提供了afterPropertiesSet方法供开发者实现Bean初始化逻辑。 - DisposableBean:对应销毁阶段...
在Spring框架中,Aware接口系列是其核心特性之一,它为Spring容器提供了向bean注入上下文信息的能力。这些接口让bean能够感知到Spring容器的存在,从而获取必要的服务或配置信息。下面我们将深入探讨Spring的Aware...
Spring Aware接口自定义获取bean的两种方式 Aware接口是Spring框架中的一种机制,通过实现Aware接口,可以获取Spring容器中的bean对象。在Spring编程中,经常需要根据bean的名称来获取相应的bean对象,这时候,...
10. **Aware接口**:Spring提供了一系列的Aware接口,如BeanNameAware、BeanFactoryAware和ApplicationContextAware,这些接口使得Bean可以在运行时获取自身的一些信息,例如Bean的名字、所处的Bean工厂或...
Spring Aware 标记接口是 Spring 框架中的一种机制,用于让 Bean 对象感知 Spring 容器的存在,以便在 Bean 对象中使用 Spring 容器提供的功能。Aware 接口是一个标记接口,表示对 XXX 可以感知通俗点解释就是:如果...
通过aware接口,可以对spring相应资源(可能包含相关核心资源)进行操作(一定要慎重) 首先创建一个类,实现ApplicationContextAware接口 , 该借口需要实现 setApplicationContext方法,该方法的参数由容器传递...
6. 实现 Aware 接口:在这个阶段,Bean已经实例化,并且已经实现了Aware接口。 7. Initialize:在这个阶段,Bean已经实例化,并且已经进行了初始化。 8. 使用Bean:在这个阶段,Bean已经实例化,并且已经可以使用。 ...
下面我们将深入探讨Spring源码流程图,了解核心组件、Bean定义信息、Bean工厂、Bean生命周期和Aware接口的作用。 核心组件解析 在Spring框架中,核心组件包括BeanFactory、BeanDefinitionReader、...
然后,Spring会检查Bean是否实现了特定的`Aware`接口,如`BeanNameAware`、`BeanFactoryAware`和`ApplicationContextAware`。这些接口提供了让Bean获取自身名称、Bean工厂或应用上下文的能力。`invokeAwareMethods()...
在 Spring 框架中,Bean 对象的创建过程是一个复杂的过程,涉及到多个步骤和接口。下面将对 Spring 源码中 Bean 对象的创建过程进行分析和解释。 1. 创建工厂,到达 BeanDefinition 步骤 在 Spring 框架中,Bean ...
同样的,当一个 bean 不在被调用时需要进行相关的析构操 作,并从 bean 容器中移除。 > Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期。Bean 的生命 周期由两组回调(call back)方法组成...
- **Aware接口**:通过实现特定的Aware接口,Bean可以获得Spring容器中的资源和信息。 - **自定义属性**:开发者可以定义自己的Aware接口来实现更复杂的功能。 ### 总结 Spring官方文档的核心篇为开发者提供了关于...
- 这些接口使bean能够获取有关自身的信息,如容器上下文和名称。 - **3.6.3 Other Aware interfaces** - 其他Aware接口允许bean获取更多的上下文信息。 - **3.7 Spring Bean的继承** - 如何在一个bean上继承另...
本项目结合两者,展示了如何在Spring中使用静态任务和动态任务,以及如何利用Spring的Aware接口和FactoryBean的概念。 首先,让我们深入理解Spring如何管理静态任务。在Spring中,静态任务通常指的是那些在应用启动...
另一个相关接口`BeanFactoryPostProcessor`则允许在bean实例化之前对`BeanDefinition`进行修改。 在Spring容器中,系统属性可以通过`Environment`接口获取,通常会预先加载到`StandardEnvironment`对象中。`...
3. **Aware 接口处理**:Spring 会检查 Bean 是否实现了特定的 xxxAware 接口,例如 BeanNameAware、BeanFactoryAware 和 ApplicationContextAware,然后注入相应的上下文信息。 4. **BeanPostProcessor**:如果 ...
Spring提供了多个Aware接口,如ResourceLoaderAware、BeanClassLoaderAware等,用于让Bean感知到Spring容器的各种资源。 1.7 Bean定义继承 Bean定义可以继承自父定义,使得子定义可以继承父定义的配置属性。 1.8 ...
Spring还提供了一系列其他Aware接口,可以帮助Bean更好地融入Spring环境。 #### 六、Bean定义继承 通过继承Bean定义,可以复用现有的Bean配置,减少冗余代码。这种方式在配置复杂的应用时非常有用。 总结起来,...