- 浏览: 164645 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (116)
- 随笔 (2)
- spring (24)
- struts (1)
- hibernate (6)
- log4j (0)
- mysql (14)
- oracle (0)
- ext (0)
- jQuery (0)
- HTML+CSS (2)
- Javascript (1)
- 其它杂碎 (0)
- IT (3)
- J2EE综合 (15)
- SQLServer (1)
- 好文章URL 待阅读 (3)
- 编辑器 (2)
- 版本控制 (5)
- Tomcat (4)
- DoJo (0)
- Ubuntu (11)
- Hadoop (3)
- cxf (3)
- maven (6)
- CI (5)
- H2 (1)
- JVM (1)
- FirefoxOS (1)
- Jboss (1)
- 操作系统 (1)
- C3P0 (2)
- Quartz (1)
- maps (10)
- 设计模式 (5)
最新评论
-
yogurt2012:
请问··我如果要调试H2数据库来分析其JOIN算法应该怎么做呢 ...
H2笔记 -
carlosfu:
很好很全,很有收获
Spring3笔记之 JDBC -
ponlya:
coldrush 写道看了你的配置 ,刚绝 file:后加绝对 ...
添加使用dtd文件 -
ponlya:
byp19980911 写道这不是很好的解决办法,最好是使用连 ...
java.net.SocketException:Software caused connection abort: socket write error -
ponlya:
ayanami001 写道为什么spring没有封装分页吗,那 ...
Spring3笔记之 JDBC(分页)
Method injection(方法注入)
bean都是singleton类型的。如果一个singleton bean要引用另外一个singleton bean,或者一个非singleton bean要引用另外一个非singleton bean时,通常情况下将一个bean定义为另一个bean的property值就可以了。不过对于具有不同生命周期的bean来说这样做就会有问题了,比如在调用一个singleton类型bean A的某个方法时,需要引用另一个非singleton(prototype)类型的bean B,对于bean A来说,容器只会创建一次,这样就没法在需要的时候每次让容器为bean A提供一个新的的bean B实例。
官方建议:You can make bean A aware of the container by implementing the ApplicationContextAware interface, and by making a getBean("B") call to the container ask for (a typically new) bean B instance every time bean A needs it.
借http://blog.csdn.net/zml2004/archive/2006/04/15/664309.aspx例子
Lookup Method Injection
<!--EndFragment-->
com.spring305.test.methodInjection.RandomT.java
public class RandomT{ private int num = (int)(100*Math.random()); public void printRandom(){ System.out.println("随机数是"+num); } }
com.spring305.test.methodInjection.HelloRandom.java
//一个代理接口 public interface HelloRandom { public RandomT getRandom(); public abstract RandomT createRandom(); // 这个方法最为重要,是方法注入的关键 }
com.spring305.test.methodInjection.HelloAbstract.java
public abstract class HelloAbstract implements HelloRandom { private RandomT random; public void setRandom(RandomT random) { this.random = random; } public abstract RandomT createRandom(); @Override public RandomT getRandom() { // TODO Auto-generated method stub return this.random; } }
src/methodInjection.xml
<!-- 方法注入--> <bean id="myRandom" class="com.spring305.test.methodInjection.RandomT" scope="prototype" /> <!-- scope="singleton" --> <bean id="helloRandom" class="com.spring305.test.methodInjection.HelloAbstract" > <lookup-method name="createRandom" bean="myRandom"/> <property name="random"> <ref local="myRandom" /> </property> </bean>
Test
//@Test public void testMethodInjection(){ ApplicationContext context = new ClassPathXmlApplicationContext("methodInjection.xml"); HelloRandom helloRandom1 = (HelloRandom)context.getBean("helloRandom"); System.out.println("下面两个实例没有采用方法注入"); RandomT r1 = helloRandom1.getRandom(); RandomT r2 = helloRandom1.getRandom(); System.out.println("Random 的两个实例是否指向同一个引用:" + (r1 == r2)); r1.printRandom(); r2.printRandom(); System.out.println(); System.out.println("下面两个实例采用方法注入"); HelloRandom helloRandom = (HelloRandom)context.getBean("helloRandom"); RandomT r3 = helloRandom.createRandom(); RandomT r4 = helloRandom.createRandom(); System.out.println("Random 的两个实例是否指向同一个引用:" + (r3 == r4)); r3.printRandom(); r4.printRandom(); }
另官方没有给这种Lookup方法注入而是提供了:Arbitrary method replacement方法替换:
com.spring305.test.methodInjection.MyValueCalculator.java
public class MyValueCalculator { public String computeValue(String input) { return input+"_"+(int)(100*Math.random()); } }
com.spring305.test.methodInjection.ReplacementComputeValue.java
public class ReplacementComputeValue implements MethodReplacer { @Override public Object reimplement(Object obj, Method method, Object[] args) throws Throwable { String input = (String) args[0]; input += "123"; return input; } }
xml中再加上:
<bean id="myValueCalculator" class="com.spring305.test.methodInjection.MyValueCalculator"> <!-- arbitrary method replacement --> <replaced-method name="computeValue" replacer="replacementComputeValue"> <arg-type>String</arg-type> </replaced-method> <!-- <replaced-method name="computeValue" replacer="helloReplacer"/> --> </bean> <bean id="replacementComputeValue" class="com.spring305.test.methodInjection.ReplacementComputeValue"/>
测试:
@Test public void testMethod(){ ApplicationContext context = new ClassPathXmlApplicationContext("methodInjection.xml"); ReplacementComputeValue reValue = context.getBean("replacementComputeValue",ReplacementComputeValue.class); MyValueCalculator myValueCalculator = context.getBean("myValueCalculator",MyValueCalculator.class); System.out.println(myValueCalculator.computeValue("add"));; }
发表评论
-
Spring整合Hibernate(摘录)
2011-05-07 09:48 742简要步骤From:http://blog.csdn.net/s ... -
Spring3笔记之 JDBC(分页)
2011-04-25 22:08 2017接上篇的实体,DAO接口,实现,测试及XML http://p ... -
Spring3笔记之 JDBC
2011-04-25 22:02 7813使用Spring 的JDBC 先创建表: DROP TAB ... -
Spring3笔记之 事务传播
2011-04-24 15:51 1211摘自:http://zhxing.iteye.com/blog ... -
Spring3笔记之 AOP
2011-04-24 14:24 1902Spring AOP部分使用JDK动态代理或者CGLIB来为目 ... -
Spring3笔记之 AOP Cglib 代理
2011-04-24 14:13 1356JDK的Proxy实现代理要求 ... -
Spring3笔记之 AOP JDK 代理
2011-04-24 14:09 1053使用JDK代理,代理对象必须实现一接口 com.spring ... -
Spring3之 Resource
2011-04-21 22:49 3977主要是org.springframework.core.io. ... -
Spring3之 bean 注解
2011-04-20 22:18 1503小记下,spring注解相关: com.spring305. ... -
Spring3之 bean 定制bean特性
2011-04-19 21:10 1294Customizing the nature of a bea ... -
Spring3之 bean 作用域scope
2011-04-18 22:21 1460Bean scopes 作用域 5个:singleton,p ... -
Spring3之 bean AutoWire
2011-04-17 12:01 5937Autowiring collaborators 自动装配 ... -
Spring3之 bean depends-on
2011-04-17 08:56 3273depends-on depend-on用来表 ... -
Spring3之 bean Lazy-initialized beans
2011-04-17 08:48 1971Lazy-initialized beans延迟 ... -
Spring3之 集合对象属性注入
2011-04-16 23:17 1209com.spring305.test.beanInit.cpo ... -
Spring3之 bean idref?
2011-04-16 18:39 966很是奇怪idref是干什么 ... -
Spring3之 bean简单属性注入
2011-04-16 17:40 1365DI (依赖注入)有二种: Constructor-based ... -
Spring3之 实例化bean2
2011-04-16 14:30 1015Spring3之 bean命名(http://ponlya.i ... -
Spring3之 bean命名
2011-04-16 11:36 2009一、bean的命名采用标准Java命名约定:小写字母开头,首字 ... -
Spring3之 IoC容器的实例化
2011-04-16 08:39 1516Bean:在Spring中,那些组成你应用程序的主体(ba ...
相关推荐
在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...
在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...
其中,Bean的实例化是Spring框架的核心功能之一,它支持多种实例化Bean的方式,以适应不同的应用场景和需求。本文将深入探讨Spring中实例化Bean的三种主要方式:构造器注入、静态工厂方法注入以及实例工厂方法注入。...
5. **依赖注入**: Spring的核心特性之一就是依赖注入(Dependency Injection,DI)。它允许我们将对象的依赖关系从代码中解耦出来,使系统更易于测试和维护。Spring支持构造器注入、setter注入和接口注入等多种方式...
在Spring框架中,Bean装配是核心功能之一,它负责初始化、配置和管理应用程序中的对象。本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和...
3. **Bean接口回调**:如果Bean实现了特定的接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,Spring会在适当的时候调用对应的回调方法。这些接口允许Bean获取其ID、BeanFactory引用或...
在Spring框架中,BeanDefinition是核心组件之一,它定义了bean的基本信息和元数据,包括bean的类、作用域、依赖关系、初始化方法等。在Spring容器启动时,配置文件或注解中的bean定义会被解析成BeanDefinition对象,...
Spring 3是Java企业级应用开发的一个关键组件,它提供了强大的依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及全面的Web MVC支持。下面,我们将详细讲解集成过程中的...
Spring通过依赖注入(Dependency Injection,简称DI)来管理Bean之间的关系。依赖注入有两种主要方式:设值注入(Setter Injection)和构造器注入(Constructor Injection)。 - **设值注入**:通过`<property>`...
3. **初始化回调**:一旦所有依赖注入完成,Spring会调用Bean的`init-method`指定的方法,如果有的话,允许Bean在完全准备好使用之前进行进一步的初始化。 4. **AOP代理**:如果Bean配置了AOP代理,Spring会在Bean...
4. **方法注入(Method Injection)**:`@PostConstruct`和`@PreDestroy`注解分别标识初始化方法和清理方法,Spring会在bean初始化和销毁时调用它们。 5. **AOP注解**:`@Aspect`定义了一个切面,`@Before`、`@...
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"> </bean> ``` #### 四、Spring Bean的生命周期 - **初始化和销毁方法**: - 初始化方法可以通过`init-method`属性指定,而销毁方法...
Spring IOC,全称为Inversion of Control,即控制反转,是Spring框架的核心特性之一。它将对象的创建和管理从应用程序代码中分离出来,使得应用程序不再负责对象的生命周期,而是由Spring容器来负责。这种设计模式...
1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过DI,我们可以将对象之间的耦合度降到最低,使得代码更易于测试和维护。在源码中,可以看到不同组件如何通过构造器、setter方法或接口实现DI...
资源释放:<bean destroy-method=""/>仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! 控制权:对象的创建和调用关系的控制. (3)DI概念 Dependecy ...
20、springbean容器的生命周期是什么样的? Spring Bean的生命周期包括以下几个主要阶段: - Bean的实例化。 - 对Bean进行属性赋值和依赖注入。 - 如果Bean实现了BeanNameAware、BeanFactoryAware等接口,会调用相应...
3. `dependency injection (DI)`:通过`<property>`、`<constructor-arg>`等标签实现。例如,如果`ExampleClass`需要一个`Service`对象,可以这样设置依赖: ```xml <bean id="exampleBean" class=...
1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一是DI,它使得组件之间的耦合度降低,提高了代码的可测试性和可维护性。在Spring3中,DI可以通过XML配置、注解或基于Java的配置实现。 2. **AOP...