- 浏览: 1568659 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
spring 两种后处理器
第一种,Bean 后处理器
对容器中bean进行处理,对bean的功能进行额外的增强
容器后处理器
spring已经提供了如下几个容器后处理器
PropertyPlaceHolderConfigurer 属性占位符配置器
dbconn.properties
PropertyOverrideConfigurer:重写占位符配置器
db.properties
第一种,Bean 后处理器
对容器中bean进行处理,对bean的功能进行额外的增强
package cn.sh.processor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import cn.sh.springmvc.applicationContextAware.MyContent; import cn.sh.springmvc_java.American; /** * Spring Bean的后置处器 * @author Bin * */ public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器在初始化之前对"+beanName+"进行增强处理...."); //bean 容器中的Bean //返回的Bean 可以和原Bean截然不同 return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器在初始化之后对"+beanName+"进行增强处理..."); if(bean instanceof MyContent){ System.out.println("修改BeanName的名字"); MyContent a=(MyContent)bean; a.setBeanName("Struts2权威指南"); } return bean; } } <!--Bean 后置处理器 --> <bean id="beanPostProcessor" class="cn.sh.processor.MyBeanPostProcessor"/>
//如果采用ApplicationContext 作为容器,不需要手动注入Bean后处理器 //测试 BeanPostProcessor @Test public void test13() { AbstractApplicationContext act=new ClassPathXmlApplicationContext("classpath*:applicationContent.xml"); MyContent p=act.getBean("ZG",MyContent.class); //获取容器 System.out.println(p.getContext()); System.out.println(act==p.getContext()); //获取配置的bean id System.out.println("BeanName:"+p.getBeanName()); //销毁 act.registerShutdownHook(); } //如果采用 BeanFactory 作为spring的容器,需要手动注入bean后处理器 @Test public void test18() { ClassPathResource isr=new ClassPathResource("applicationContent.xml"); XmlBeanFactory beanFactory=new XmlBeanFactory(isr); MyBeanPostProcessor proc=beanFactory.getBean("beanPostProcessor", MyBeanPostProcessor.class); //如果采用beanfactory, bean后处理器必须显示的注入到 factory中 beanFactory.addBeanPostProcessor(proc); MyContent p=beanFactory.getBean("ZG",MyContent.class); //获取容器 System.out.println(p.getContext()); //获取配置的bean id System.out.println("BeanName:"+p.getBeanName()); }
容器后处理器
package cn.sh.processor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.core.Ordered; public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor,Ordered { @Override public void postProcessBeanFactory( ConfigurableListableBeanFactory beanFactory) throws BeansException { System.out.println("程序对Spring所做的BeanFactory的初始化没有改变.."); System.out.println("Spring容器是:"+beanFactory); } @Override public int getOrder() { System.out.println("采用Ordered 来指定 后处理器的order属性"); return 0; } } <bean id="beanFactoryProcessor" class="cn.sh.processor.MyBeanFactoryPostProcessor"/>
//如果采用 BeanFactory 作为spring的容器,需要手动注入beanFactory后处理器 @Test public void test19() { ClassPathResource isr=new ClassPathResource("applicationContent.xml"); XmlBeanFactory beanFactory=new XmlBeanFactory(isr); MyBeanFactoryPostProcessor bfprocessor=beanFactory.getBean("beanFactoryProcessor", MyBeanFactoryPostProcessor.class); bfprocessor.postProcessBeanFactory(beanFactory); MyContent p=beanFactory.getBean("ZG",MyContent.class); //获取容器 System.out.println(p.getContext()); //获取配置的bean id System.out.println("BeanName:"+p.getBeanName()); } //如果采用 ApplicationContext作为spring的容器,则不用进行手动注入
spring已经提供了如下几个容器后处理器
PropertyPlaceHolderConfigurer:属性占位符配置器 PropertyOverrideConfigurer:重写占位符配置器 CustomAutowireConfigurer:自定义自动装配的配置器 CustomScopeConfigurer:自定义作用配置器
PropertyPlaceHolderConfigurer 属性占位符配置器
<!--两种配置方式 属性占位符 后处理器 如果导入了context Schema 可以用cotent: --> <!-- <context:property-placeholder location="classpath:dbconn.properties"/> --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>dbconn.properties</value> </list> </property> </bean> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/> <property name="minPoolSize" value="${jdbc.minPoolSize}"/> <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/> <property name="MaxIdleTime" value="${jdbc.MaxIdleTime}"/> </bean>
dbconn.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mytest jdbc.username=root jdbc.password=123456 jdbc.maxPoolSize=40 jdbc.minPoolSize=1 jdbc.initialPoolSize=1 jdbc.MaxIdleTime=20
PropertyOverrideConfigurer:重写占位符配置器
<!-- 采用 重写 占位符配置器 发现: 重写 占位符 可以覆盖 属性占位符 中的值 两种配置方式 --> <context:property-override location="classpath:db.properties"/> <!-- <bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"> <property name="locations"> <list> <value>db.properties</value> </list> </property> </bean> --> <!--采用 重写 占位符后 就可以不用 指定 属性了 --> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> </bean>
db.properties
#beanName.property=value 的命名格式 datasource.driverClass=com.mysql.jdbc.Driver datasource.jdbcUrl=jdbc:mysql://localhost:3306/mytest datasource.user=root datasource.password=123456 datasource.maxPoolSize=40 datasource.minPoolSize=1 datasource.initialPoolSize=1 datasource.MaxIdleTime=20
发表评论
-
spring-session 中的坑
2017-07-06 15:34 9930spring-session 配置 依赖 gradle ... -
Spring AspectJ Aop Annotation
2017-03-29 17:08 654import org.aspectj.lang.Proce ... -
spring 第13天 使用@scheduled注解执行定时任务
2015-01-06 23:11 53994我们使用spring的注解 @Scheduled 执行定时任务 ... -
Spring 第12天,事务传播属性和 隔离级别
2014-09-28 00:36 7621 事务的传播属性(Propagation) 1) REQ ... -
spring 第11天 quartz任务调度
2014-08-24 13:59 1088Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
spring 第10 天 AOP 面向切面
2014-08-21 00:08 1705AOP(Aspect Orient Programming ... -
spring 第9天 Resurce 资源访问
2014-08-17 22:20 1806Spring Resource接口 spring提供的Reso ... -
spring 第8天 Spring 注解
2014-08-17 15:33 1423spring注解 @Component:标注一个普通的sp ... -
spring 第6天SpEL,P命名空间,Util Schema
2014-08-13 22:52 1249使用p名称空间配置属性 ... -
spring 第5天不同作用域的bean,注入Field,方法返回值
2014-08-11 22:31 2051协调作用域不同步的bean 问题是;当一个singleton的 ... -
spring 第4天bean继承,init,destory-method
2014-08-10 17:54 1588深入理解Spring容器中的b ... -
spring 第3天使用java类和XML配置bean
2014-08-09 16:51 1452下面采用java类来配置bean,前面都采用xml进行配置be ... -
spring 第2天,bean作用域,自动注入集合
2014-08-06 22:16 1870sping容器中的Bean <!---beans的全 ... -
spring 第1天 IOC,DI,国际化,容器事件
2014-08-04 21:27 13391.构造注入(就是使用 构 ... -
SpringMVC 注解 和非注解
2014-01-26 10:29 17962首先看看非注解的项目结构 在web.xml文件 配置spr ... -
详解spring 每个jar的作用
2013-11-19 23:54 3857spring.jar 是包含有完整 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1165为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Spring 中引用Properties文件
2013-08-29 14:39 10600其中部分配置信息(邮件发送相关): #邮件发送的相关配置 ... -
Spring IOC控制反转 依赖注入DI
2012-12-15 09:37 2283目录 1.使用IOC控制反转 中的DI依赖注入 手工注入 ... -
Spring IOC控制反转 依赖注入DI
2012-12-14 16:23 8目录 1.使用IOC控制反转 中的DI依赖注入 (两种配置方式 ...
相关推荐
Spring IOC和DI概述,Bean的配置形式,IOC容器BeanFactory和ApplicationContext概述,依赖注入的方式,属性注入,构造器注入等案例
Spring中ApplicationContext和beanfactory区别.rar
Spring的IoC容器之BeanFactory[定义].pdf
NULL 博文链接:https://ylxy3058.iteye.com/blog/2223489
BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满
本篇文章主要介绍了Spring中BeanFactory解析bean详解 ,详细的介绍了使用BeanFactory对bean进行解析的实例,有兴趣的可以了解一下。
NULL 博文链接:https://lgd-java2eye.iteye.com/blog/756599
Spring的BeanFactory的接口的中文解释
如何用基于XML配置的方式配置Spring 如何用基于Java配置的方式配置Spring 怎样用注解的方式配置Spring 请解释Spring Bean的生命周期 Spring Bean的作用域之间有什么区别 什么是Spring inner beans Spring框架中的...
spring3中实例化BeanFactory的3中方法
spring之beanfactory 的一些基本知识与其关系使用
课程目标 1. 搞清楚BeanFactory家族的接口和类的作用 ...8. 可以自主完成阅读Spring框架中Bean实例创建流程的源码 9. 可以自主完成阅读Spring框架中依赖注入流程的源码 10. 可以确定aop流程的源码阅读入口
Spring 大量引入了Java 的Reflection机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。org.springframework.beans包中包括了这些核心...
Bean是Spring管理的基本单位,在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的SessionFactory、事务管理器等。在Spring中,Bean的是一个非常广义的概念,任何的Java对象、Java...
BeanFactory管理Bean(组件)的生命周期 15 Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的...
对BeanFactory的相关所有接口的功能的关键点进行了总结描述,中文版本
Spring的生命周期是指实例化Bean时所经历的一系列阶段,即通过getBean()获取bean对象及设置对象属性时,Spring框架做了哪些事。Bean的生命周期从Spring容器实例化Bean到销毁Bean。 本文分别对 BeanFactory 和 ...
第7章保护spring 7.1springsecurity介绍 7.2验证用户身份 7.2.1配置providermanager 7.2.2根据数据库验证身份 7.2.3根据ldap仓库进行身份验证 7.3控制访问 7.3.1访问决策投票 7.3.2决定如何投票 7.3.3处理...
BeanFactory管理Bean(组件)的生命周期 15 Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的声明式...
第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份 7.2.1 配置Provider Manager 7.2.2 根据数据库验证身份 7.2.3 根据LDAP仓库进行身份验证 7.3 控制访问 7.3.1 访问决策投票 7.3.2 决定如何投票...