- 浏览: 348005 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1699本程序是关于"某考试系统"中的aop应用. ... -
反射实现 AOP 动态代理模式(2)
2010-08-05 12:40 935上面类中出现的Logger类和Level枚举还是和上一上例子的 ... -
反射实现 AOP 动态代理模式(1)
2010-08-05 12:37 904其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方 ... -
Spring事务配置的五种方式
2010-06-25 16:51 776前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
使用 Spring 2.5 注释驱动的 IoC 功能(2)
2010-06-25 16:37 895使用 JSR-250 的注释 Sprin ... -
使用 Spring 2.5 注释驱动的 IoC 功能(1)
2010-06-25 16:36 734概述 注释配置相对于 XML 配置具有很多的优势: 它可以 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:18 1056采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring事务配置方法(TransactionProxyFactoryBean)
2010-05-11 15:10 1080采用这种方式的配置时候,配置文件的增加非常快,每个bean有需 ... -
spring事务配置方法(TransactionProxyFactoryBean继承)
2010-05-11 15:07 1123大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:05 1134采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring声明式事务
2010-05-11 14:26 837Spring中几种常见的事务配置,是Aop和Ioc的充分体现以 ... -
Spring AOP 入门实例
2010-05-01 19:18 853AOP 面向切面,可以让我们在不修改业务代码的前提下,在业务代 ... -
使用动态代理实现简单AOP
2010-05-01 19:02 795Spring默认使用JDK动态代理来实现AOP,如果业务对象没 ... -
Sping acegi 配置文件
2010-05-01 18:23 966applicationContext-acegi-securi ... -
Spring的BeanFactory
2010-05-01 18:17 781一、Spring装配Bean的过程 1. 实例化; 2. 设置 ... -
几种加载Spring的配置文件的方式
2010-05-01 16:49 1288package com.liu.test; pu ... -
Quartz在Spring中动态设置cronExpression
2009-11-20 15:26 1241什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
使用Spring发邮件
2009-11-07 14:15 993关于Spring的邮件发送的功能演示: (我把程序中一些敏感 ... -
Spring中的Quartz配置
2009-11-07 10:16 911Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
Spring ~IOC Annotations
2009-10-29 18:49 10411.1 零配置使用场合 IOC Annotations ...
相关推荐
3. **Spring注入Bean到Job**:在Job执行时,我们可以直接注入其他由Spring管理的Bean,无需在Job中创建这些对象,从而减少了代码的复杂性,增强了可重用性。 4. **JobFactory的自定义**:Quartz默认使用...
当不使用构造注入时,Spring会自动寻找无参构造器来创建Bean实例。因此,为了使Spring能够正确实例化Bean,你需要确保Bean类有一个公共的无参构造器。默认情况下,Spring会对Bean的属性进行默认初始化,即基本类型设...
对于Servlet、Filter和Listener,由于它们通常在Web应用启动时由容器实例化,而非由Spring管理,所以也不能直接使用@Autowired注解或其他常规的注入方式。为了解决这个问题,可以使用以下策略: 1. **Servlet**: ...
它通过读取配置文件或使用注解来创建和管理Bean实例,并将依赖关系自动注入到需要它们的Bean中。 17、什么是springbean? Spring bean是存储在Spring IoC容器中的Java对象,可以通过容器来配置和管理。 18、spring...
通过上述分析和示例,我们可以看到,在Spring框架中,虽然不能直接使用`@Value`注解为静态变量注入值,但可以通过定义一个非静态方法并使用`@Value`注解来间接实现这一目标。这种方法不仅避免了潜在的警告和错误,还...
Bean自动装配是指Spring容器根据特定规则自动将Bean实例注入到依赖它们的其他Bean中的过程。这种方式可以简化配置。 **3.13 解释不同的自动装配模式** Spring框架支持以下几种自动装配模式: - **no**:默认模式...
本篇文章将深入探讨如何使用xDoclet来自动创建Spring的bean配置文件。 首先,理解xDoclet的基础概念是必要的。xDoclet是一款基于Javadoc的元数据处理工具,它可以读取Java源代码中的特殊注释,并根据这些注释生成...
- `<bean id="backupQuarz" class="SavaLog"/>` 表示将 `SavaLog` 类作为 Bean 注入。 - `<bean id="quartzDetail">` 定义了具体的任务详情,包括目标对象 `targetObject` 和要执行的方法名 `targetMethod`。 - `...
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容器管理和配置Bean,以及如何实现依赖注入的基本方法。这对于构建高效、可维护的企业级应用至关重要。接下来,您可以进一步深入...
2. 使用方法注入(lookup-method),让容器在运行时重写bean的方法,返回其他bean的新实例。 Spring还提供了定制bean生命周期行为的机制。例如,可以在bean初始化完成后执行特定操作: 1. 使用`init-method`属性,...
### Spring 定时器的使用 #### 背景与需求 在开发应用程序时,并非所有操作都需要用户主动触发。有些任务需要系统自动执行,比如数据同步、定期备份等。例如,电力行业的集抄系统(一种自动收集电表读数的系统)...
在不使用这个库的情况下,开发者需要手动管理SqlSessionFactory或SqlSession,并确保它们在Spring事务边界内正确关闭。而MyBatis-Spring通过提供SqlSessionTemplate和SqlSessionDaoSupport等工具类,使得MyBatis可以...
3. 注解配置:使用如@Service、@Component、@Repository等注解直接在类上声明Bean。 【Spring Bean的生命周期】 Spring Bean的生命周期包括初始化、正常服务和销毁三个阶段。Spring提供了一些回调方法,如初始化...
Spring框架是Java开发中不可或缺的一部分,它为构建高效、可测试和可维护的应用程序提供了全面的基础设施。在本文中,我们将深入探讨Spring框架的5.3.9版本,包括其核心特性、文档、库和XML架构。 首先,Spring ...
在Spring 2.0中,我们可以使用Bean的生命周期回调方法来初始化和清理Bean。@PostConstruct和@PreDestroy注解分别标记在初始化方法和清理方法上,使得在Bean的生命周期中能有条不紊地执行特定操作。 对于“源码”...
- `HelloServiceImpl.java`:服务接口的实现,可以通过Spring注入其他依赖。 - `spring-config.xml`:Spring配置文件,声明服务bean。 - `JaxWsServerFactoryBean.java`:创建并启动Web服务的工厂类,设置Spring...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用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. 在应用...