- 浏览: 337870 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
<?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="chinese" class="Bean.lookupbean.Chinese"> <property name="axe"> <ref local="axe"/> </property> <!-- 指定lookup注入方法,该方法用来保证每次产生的non-singleton bean都是新的实例,使用bean属性确定lookup方法的返回值 --> <lookup-method name="createAxe" bean="axe"/> </bean> <bean id="axe" class="Bean.lookupbean.SteelAxe" singleton="false"></bean> </beans>
spring bean有两种状态,singleton和non-singleton,区别是singletom在整个生命周期中只实例化一次,由spring进行管理,而non-singleton可以实例化多次,spring不负责进行管理,当有依赖关系存在是,会有这样一个问题,当singleton bean依赖non-singleton时,由于singleton bean只初始化一次,而non-singleton可以初始化多次,这样就会造成不同步的想象,解决办法是使用spring提供的lookup方法注入
定义接口:
package Bean.lookupbean; public interface Person { public Axe getAxe(); public void useAxe(); public abstract Axe createAxe(); } package Bean.lookupbean; public interface Axe { public String chop(); }
实现类:
注意,方法注入所需要的方法,必须是abstract的
配置文件; 这里要把axe bean设置成singleton=false否则,由于容器内只有一个目标bean实例,即使采用lookup注入,每次依然返回同一个实例,lookup方法不仅适用于设值注入,也适用于构造注入
运行结构: 不使用lookuppackage Bean.lookupbean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import Bean.lookupbean.Person;
public abstract class Chinese implements Person ...{
private Axe axe;
public void useAxe() ...{
axe.chop();
}
public Axe getAxe() ...{
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
//方法注入所需要的方法,由spring提供实现
public abstract Axe createAxe();
}
package Bean.lookupbean;
public class SteelAxe implements Axe {
private int count=0;
public String chop() ...{
return "这是一把铁斧子"+ ++count;
}
}
<?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="chinese" class="Bean.lookupbean.Chinese">
<property name="axe">
<ref local="axe"/>
</property>
<!-- 指定lookup注入方法,该方法用来保证每次产生的non-singleton bean都是新的实例,使用bean属性确定lookup方法的返回值 -->
<lookup-method name="createAxe" bean="axe"/>
</bean>
<bean id="axe" class="Bean.lookupbean.SteelAxe" singleton="false"></bean>
</beans>
public static void main(String[] args) throws Exception ...{
String path=new Test().getClass().getResource("/").getPath();
String realpath=path.substring(1, path.length());
ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/lookupbean.xml");
System.out.println("不使用lookup");
Person p=(Person)context.getBean("chinese");
System.out.println(p.getAxe());
System.out.println(p.getAxe());
System.out.println(p.getAxe().chop());
System.out.println(p.getAxe().chop());
System.out.println("使用lookup");
System.out.println(p.createAxe());
System.out.println(p.createAxe());
System.out.println(p.createAxe().chop());
System.out.println(p.createAxe().chop());
}
Bean.lookupbean.SteelAxe@1e87719
Bean.lookupbean.SteelAxe@1e87719
这是一把铁斧子1
这是一把铁斧子2
使用lookup
Bean.lookupbean.SteelAxe@e32802
Bean.lookupbean.SteelAxe@b23210
这是一把铁斧子1
这是一把铁斧子1
可以看到,不使用lookup,spring返回同一个实例(由于不同步的原因),使用lookup,每次返回一个新的实例
发表评论
-
在Struts中基于Spring的AOP MethodInterceptor(拦截器)的权限验证
2010-08-13 13:34 1657本程序是关于"某考试系统"中的aop应用. ... -
反射实现 AOP 动态代理模式(2)
2010-08-05 12:40 876上面类中出现的Logger类和Level枚举还是和上一上例子的 ... -
反射实现 AOP 动态代理模式(1)
2010-08-05 12:37 846其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方 ... -
Spring事务配置的五种方式
2010-06-25 16:51 702前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
使用 Spring 2.5 注释驱动的 IoC 功能(2)
2010-06-25 16:37 868使用 JSR-250 的注释 Sprin ... -
使用 Spring 2.5 注释驱动的 IoC 功能(1)
2010-06-25 16:36 678概述 注释配置相对于 XML 配置具有很多的优势: 它可以 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:18 1002采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring事务配置方法(TransactionProxyFactoryBean)
2010-05-11 15:10 1050采用这种方式的配置时候,配置文件的增加非常快,每个bean有需 ... -
spring事务配置方法(TransactionProxyFactoryBean继承)
2010-05-11 15:07 1083大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:05 1048采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring声明式事务
2010-05-11 14:26 808Spring中几种常见的事务配置,是Aop和Ioc的充分体现以 ... -
Spring AOP 入门实例
2010-05-01 19:18 820AOP 面向切面,可以让我们在不修改业务代码的前提下,在业务代 ... -
使用动态代理实现简单AOP
2010-05-01 19:02 745Spring默认使用JDK动态代理来实现AOP,如果业务对象没 ... -
Sping acegi 配置文件
2010-05-01 18:23 923applicationContext-acegi-securi ... -
Spring的BeanFactory
2010-05-01 18:17 741一、Spring装配Bean的过程 1. 实例化; 2. 设置 ... -
几种加载Spring的配置文件的方式
2010-05-01 16:49 1247package com.liu.test; pu ... -
Quartz在Spring中动态设置cronExpression
2009-11-20 15:26 1176什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
使用Spring发邮件
2009-11-07 14:15 934关于Spring的邮件发送的功能演示: (我把程序中一些敏感 ... -
Spring中的Quartz配置
2009-11-07 10:16 841Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
Spring ~IOC Annotations
2009-10-29 18:49 10091.1 零配置使用场合 IOC Annotations ...
相关推荐
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
该框架只提供和设备对接部分(通过spring的bean注入解耦特性实现业务和协议实现分离), 使用此框架的客户必须遵循此框架设计的Api规范;接入一台设备只需创建两三个对象(协议的实现不算在内).并提供丰富的日志输出...
该框架只提供和设备对接部分(通过spring的bean注入解耦特性实现业务和协议实现分离), 使用此框架的客户必须遵循此框架设计的Api规范;接入一台设备只需创建两三个对象(协议的实现不算在内).并提供丰富的日志输出...
主要包括一下几个方面的功能,具体如下: 整合spring,handle支持bean注入; 支持同步异步广播事件; 自动注册及注销handle;升级日志暂无常用功能代码演示** 示例:导出用户列表 **public class TestEvent ...
141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...
141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步。在很多情况下采用异步往往更有效率。 数据库三大范式? 答:1:确保每列都是不可分割的原子值 2...
3.6.5 使用托管Bean的方法执行校验 173 3.6.6 绑定到Bean属性的校验器 175 3.7 本章小结 177 第4章 利用JDBC和JTA访问 数据库和管理全局事务 178 4.1 JDBC和容器管理的数据源 179 4.1.1 JDBC概述 179 4.1.2 使用JDBC...
canal集成es5x版本,进行mysql-es数据增量同步 rocketmq 简单学习使用 rocketMq事务机制了解学习 sharding-jdbc 学习使用,了解基础概念 spring-boot-starter-skeleton 和 uboost 本意提供一个框架用于像feign,...
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...