- 浏览: 201733 次
- 性别:
- 来自: 紫禁城
文章分类
最新评论
-
a1439226817:
<!doctype html><html l ...
发布一个支持N级下拉列表联动的控件 -
a1439226817:
也不高个测试的demo,别人怎么用啊
发布一个支持N级下拉列表联动的控件 -
davaidgao:
不全啊,这是
Spring3.x权威开发指南 -
caizi12:
对于map绑定很是不方便,现在的做法,需要创建一User类,再 ...
浅谈 SpringMVC 数据绑定 -
joeyhuang:
不全啊..
Spring3.x权威开发指南
1.对Bean进行后处理,必须实现BeanPostProcessor接口,后处理是在Bean实例化以及装配完成之后发生的。
下面是一个简单的例子:
先来创建一个实现了BeanPostProcessor接口的类,此类功能是把Bean中的所有String属性的值的r,l或R,L换成w或W,代码如下:
package cn.itcast;
import java.lang.reflect.Field;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class Fuddifier implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
Field[] fields = arg0.getClass().getDeclaredFields();
try {
for (int i = 0; i < fields.length; i++) {
if (fields[i].getType().equals(java.lang.String.class)) {
fields[i].setAccessible(true);
String original = (String) fields[i].get(arg0);
fields[i].set(arg0, fuddify(original));
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return arg0;
}
private String fuddify(String orig) {
if (orig == null)
return orig;
return orig.replaceAll("(r|l)", "w").replaceAll(" (R|L) ", "W");
}
public Object postProcessAfterInitialization(Object arg0, String arg1)
throws BeansException {
return arg0;
}
}
再来创建一个简单的javaBean:
package cn.itcast;
public class Rabbit {
private String description;
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
XML配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="fuddifier" class="cn.itcast.Fuddifier" />
<bean id="rabbit" class="cn.itcast.Rabbit">
<property name="description">
<value>That rascally rabbit!</value>
</property>
<property name="address">
<value>Dalian</value>
</property>
</bean>
</beans>
写个主函数来测试一下:
package cn.itcast;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MainClass {
public static void main(String[] args) {
// 第一种方法,如果只用上下文容器就只需在xml文件中加入这句就可以了:
//<bean id="fuddifier" class="cn.itcast.Fuddifier" />
// ApplicationContext factory = new ClassPathXmlApplicationContext(
// "/applicationContext.xml");
// 第二种方法,使用Bean工厂必须得调用工厂的addBeanPostProcessor()方法来注册BeanPostProcessor,
//这样就不需要上面那句:<bean id="fuddifier" class="cn.itcast.Fuddifier" />
ConfigurableBeanFactory factory = new XmlBeanFactory(
new ClassPathResource("/applicationContext.xml"));
BeanPostProcessor fuddifier = new Fuddifier();
factory.addBeanPostProcessor(fuddifier);
Rabbit rabbit = (Rabbit) factory.getBean("rabbit");
System.out.println(rabbit.getDescription());
System.out.println(rabbit.getAddress());
}
}
两种方法的运行结果都一样:
That wascawwy wabbit!
Dawian
可以看出两个属性的值都改变了。
2.Bean工厂后处理,必须实现接口BeanFactoryPostProcessor,此接口的功能是在Bean工厂载入所有Bean的定义后,实例化Bean之前,对Bean工厂做一些后处理工作。
来看一个简单的例子:
先创建一个实现了BeanFactoryPostProcessor的类,此类记录了容器中的Bean总数还把rabbit1的address值改变了。
package cn.it315;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import cn.itcast.Rabbit;
public class BeanCounter implements BeanFactoryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0)
throws BeansException {
System.out.println("Bean count: " + arg0.getBeanDefinitionCount());
Rabbit rabbit = (Rabbit)arg0.getBean("rabbit1");
rabbit.setAddress("湖南");
}
}
XMl配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<bean id="beanCounter" class="cn.it315.BeanCounter" />
<bean id="rabbit1" class="cn.itcast.Rabbit">
<property name="description">
<value>That rascally rabbit!</value>
</property>
<property name="address">
<value>Dalian</value>
</property>
</bean>
<bean id="rabbit2" class="cn.itcast.Rabbit">
<property name="description">
<value>That rascally rabbit!</value>
</property>
<property name="address">
<value>Shenyang</value>
</property>
</bean>
</beans>
javaBean用的还是上面那个Rabbit。
来写一个主函数测试一下:
package cn.it315;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.Rabbit;
public class MainClass {
public static void main(String[] args) {
//使用应用上下文容器,只需在xml文件中注册就行了:
// <bean id="beanCounter" class="cn.it315.BeanCounter" />
ApplicationContext factory = new ClassPathXmlApplicationContext(
"/applicationContext.xml");
Rabbit rabbit = (Rabbit) factory.getBean("rabbit1");
System.out.print(rabbit.getAddress());
}
}
运行结果:
Bean count: 3
湖南
注意:在Bean工厂容器中无法使用BeanFactoryPostProcessor
3.分散配置,使用Spring的PropertyPlaceholderConfigurer告诉Spring从外部属性文件中装载一些配置信息。
写一个属性文件:
url=jdbc:odbc:test
driver=sun.jdbc.odbc.JdbcOdbcDriver
username=sa
password=
XML文件就象下面这样配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">location属性告诉Spring从哪找到属性文件
<value>jdbc.properties</value>
</property>
</bean>
下面的<value>就是从属性文件中读取出来的。
<bean id="dataSource" class="cn.itcast.DriverManagerDataSource">
<property name="url">
<value>${url}</value>
</property>
<property name="driver">
<value>${driver}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
</beans>
DriverManagerDataSource的内容如下:
package cn.itcast;
public class DriverManagerDataSource {
private String url;
private String driver;
private String username;
private String password;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
测试一下:
package cn.itcast;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainClass {
public static void main(String[] args) throws SQLException,
ClassNotFoundException {
ApplicationContext factory = new ClassPathXmlApplicationContext(
"applicationContext.xml");
DriverManagerDataSource dataSource = (DriverManagerDataSource) factory
.getBean("dataSource");
Class.forName(dataSource.getDriver());
Connection conn = DriverManager.getConnection(dataSource.getUrl(),
dataSource.getUsername(), dataSource.getPassword());
System.out.println(conn);
}
}
运行结果:
sun.jdbc.odbc.JdbcOdbcConnection@efd552
可以看出上面已经从属性文件中读取出相应的属性建立好数据库的连接了。
发表评论
-
浅谈 SpringMVC 数据绑定
2011-03-24 13:41 4620查看spring源码可以看出spring支持转换的数据类型: ... -
使用 Spring 2.5 基于注解驱动的 Spring MVC
2010-08-23 16:39 815基于注解的配置有越来越流行的趋势,Spring 2 ... -
Spring3.x权威开发指南
2010-08-23 11:30 3086Spring3.x权威开发指南 -
几个Spring的小例子
2006-09-10 17:27 790一 .第一个Spring程序: 首先创建一个接口:packag ... -
Spring中创建切面
2006-09-11 15:39 1116一。创建切面:Spring中的通知类型有四种:Around:拦 ... -
使用数据库连接池和jdbc中调用存储过程
2006-09-22 15:21 1000数据库连接池:数据库连接不仅仅是在应用服务器与数据库之间建立一 ... -
一个使用JdbcTemplate增加一组数据的完整例子
2006-09-23 12:44 1537一个使用JdbcTemplate增加 ... -
Hibernate学习笔记
2006-10-12 20:43 636J2EE体系结构分为三层:1.表示层(JSP/Servlet) ... -
一个使用ibatis对数据库增删改查的例子
2006-10-28 22:29 1300一个使用ibatis对数据库增删改查的例子:这里用的开发环境是 ... -
ibatis和Spring整合的详细例子
2006-10-28 22:30 1000ibatis和Spring整合的详细例子,数据库用的是mysq ... -
Spring XML配置十二个最佳实践
2006-11-01 13:28 626Spring XML配置十二个最佳 ... -
Servlet的生命周期
2006-11-10 00:27 1137Servlet的生命周期 当 ... -
JSP Struts之HTML标签库详解
2006-11-28 21:50 843JSP Struts之HTML标签库详解 Struts提供 ... -
WebWork 入门示例
2006-12-07 00:12 702准备工作: Eclipse3.2 MyEclip ...
相关推荐
NULL 博文链接:https://wuhuajun.iteye.com/blog/1926731
NULL 博文链接:https://364232252.iteye.com/blog/2369723
在开发过程中,将监视JS文件和SASS文件,并准备对其进行处理和重新加载。 BEAN Stack生成器旨在消除膨胀和裸露的骨骼,以便于自定义。 请让我知道改进此工具的建议。 从0.3.0版本开始,您现在可以选择使用基本bean...
主要介绍了Spring实战之Bean的后处理器操作,结合实例形式详细分析了Bean的后处理器相关配置、操作方法及使用注意事项,需要的朋友可以参考下
3.5.2bean工厂的后处理 3.5.3配置属性的外在化 3.5.4提取文本消息 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刷新脚本...
3.5.2 Bean工厂的后处理 3.5.3 配置属性的外在化 3.5.4 提取文本消息 3.5.5 程序事件的解耦 3.5.6 让Bean了解容器 3.6 脚本化的Bean 3.6.1 给椰子上Lime 3.6.2 脚本化Bean 3.6.3 注入脚本化Bean的属性 ...
3.5.2 Bean工厂的后处理 3.5.3 配置属性的外在化 3.5.4 提取文本消息 3.5.5 程序事件的解耦 3.5.6 让Bean了解容器 3.6 脚本化的Bean 3.6.1 给椰子上Lime 3.6.2 脚本化Bean 3.6.3 注入脚本化Bean的属性 ...
主要介绍了SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题的解决方法,需要的朋友可以参考下
可根据对话状态的保持性,即有状态和无状态对会话bean进行分类。 无状态的会话 bean没有内部状态。它们不跟踪记录从一个方法调用传递到另一个方法调用的信息。因此,每次调用无状态的业务方法都独立于前一次调用,...
2.4.2 对Bean工厂进行后处理 2.4.3 分散配置 2.4.4 定制属性编辑器 2.4.5 解析文本信息 2.4.6 监听事件 2.4.7 发布事件 2.4.8 感知其他Bean 2.5 小结 第3章 创建切面 3.1 ...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成...
brew install node 安装完成后,在终端中导航到该存储库的根目录。 在那里,您需要设置依赖的库,只需运行: npm install (请注意,这两个步骤都需要互联网连接。) 这将设置和一些帮助程序库。 Noble处理所有蓝牙...
期末大作业,适合初学者,下载后可以直接运行。...bean层书写我们所用到的类,dao层执行sql语句,中文的过滤层(不用进行任何改动),servlet层用于接收页面传来的数据并进行处理,jsp就是页面,其中jsp用到了c标签。
PhoneShop-SSM:✦项目描述:该项目主要实现手机商城,商家将自己要卖的手机放在平台上,顾客可以加入购物车并购买,商家可以看到所有顾客的订单订单订单进行处理,其中伴随着数据库中数据的修改。该项目中还设置了一...
使用oncase-biserver-uploader,您只需添加我们的库并更改您的plugin.spring.xml ,即可进行文件的上传和后处理。 启用 您只应: 将我们的JAR oncase-biserver-uploader-XXXjar到您的插件lib文件夹中,然后; 在...
并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成...
10.5.9 对关联实体进行排序 424 10.6 继承关系映射 426 10.6.1 整个类层次对应一张表的 映射策略 427 10.6.2 连接子类的映射策略 430 10.6.3 每个具体类对应一张表的 映射策略 434 10.7 使用抽象实体和非实体父类 ...
这里是当碰到一个bean标签的时候所进行的处理,也既是对bean的定义进行解释,可以看到parseBeanDefinitionElement方法的第一个参数就是bean则个元素,第二个参数表示该bean是否为内置的bean,从这里进行解释的bean都...
并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成...