首页
IT
登录
6mi
u
盘
搜
搜 索
IT
Spring的依赖注入(接口注入)
Spring的依赖注入(接口注入)
xiaoxiao
2021-04-16
40
Java代码
Spring的依赖注入(接口注入)
2009
-
11
-
26
10
:
06
148
人阅读 评论(
0
) 收藏 举报
这篇文章来谈谈《Spring Framework 开发参考手册》的
3.3
.
3.1
小节中的Lookup方法注入。
仔细看看文档,这种方法主要是用在Singleton的Object中使用非Singleton的Bean时,通过lookup-method的
Java代码
那个方法来取得非Singleton的Bean。一般用的不多,在用这种定义之前最好想明白你的需求。
· 先建立一个包:javamxj.spring.basic.lookup ,然后把以下
5
个文件放在这个包下。
Hello.java.
package
javamxj.spring.basic.lookup;
public
interface
Hello {
public
Random getRandom();
public
abstract
Random createRandom();
}
Random.java
package
javamxj.spring.basic.lookup;
public
class
Random {
private
int
i = (
int
) (
100
* Math.random());
public
void
printRandom() {
System.out.println(
"输出随机整数: "
+ i);
}
}
HelloAbstract.java
package
javamxj.spring.basic.lookup;
public
abstract
class
HelloAbstract
implements
Hello {
private
Random random;
public
Random getRandom() {
return
random;
}
public
void
setRandom(Random random) {
this
.random = random;
}
public
abstract
Random createRandom();
}
beans.xml
<?xml version=
"1.0"
encoding=
"GBK"
?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<beans>
<bean id=
"ran"
class
=
"javamxj.spring.basic.lookup.Random"
singleton=
"false"
/>
<bean id=
"hello"
class
=
"javamxj.spring.basic.lookup.HelloAbstract"
>
<lookup-method name=
"createRandom"
bean=
"ran"
/>
<property name=
"random"
>
<ref local=
"ran"
/>
</property>
</bean>
</beans>
Main.java
package
javamxj.spring.basic.lookup;
import
org.springframework.beans.factory.BeanFactory;
import
org.springframework.beans.factory.xml.XmlBeanFactory;
import
org.springframework.core.io.ClassPathResource;
import
org.springframework.core.io.Resource;
public
class
Main {
public
static
void
main(String[] args) {
Resource res =
new
ClassPathResource(
"javamxj/spring/basic/lookup/beans.xml"
);
BeanFactory ft =
new
XmlBeanFactory(res);
Hello h = (Hello) ft.getBean(
"hello"
);
Random r1 = h.getRandom();
Random r2 = h.getRandom();
System.out.println(
"没有采用Lookup方法注入:"
);
System.out.println(
"Random 的两个实例指向同一个引用:"
+ (r1 == r2));
r1.printRandom();
r2.printRandom();
Random r3 = h.createRandom();
Random r4 = h.createRandom();
System.out.println(
"/n采用Lookup方法注入:"
);
System.out.println(
"Random 的两个实例指向同一个引用:"
+ (r3 == r4));
r3.printRandom();
r4.printRandom();
}
}
简单说明一下:
· Hello是一个接口类,实现面向接口编程。
· Random类用来输出随机整数。
· HelloAbstract是一个抽象类,包含了一个属性:random,还包含一个抽象方法createRandom(),如果这个方法不是抽象的,spring会重写已有的实现。
· beans.xml中定义了两个bean,ran指向Rondom类,注意它不是singleton的;hello指向HelloAbstract类,其中的random属性指向ran,createRandom方法也指向ran。
· 在Main类中,Hello类分别利用getRandom()和createRandom()方法来调用Random类。
· 这次需要将 spring-framework主目录/lib/cglib 目录中的cglib-nodep-
2
.1_2.jar加入到项目的 Libraries中,使用其中的动态代理。
运行结果:
没有采用Lookup方法注入:
Random 的两个实例指向同一个引用:
true
输出随机整数:
98
输出随机整数:
98
采用Lookup方法注入:
Random 的两个实例指向同一个引用:
false
输出随机整数:
51
输出随机整数:
26
本文来自博客,转载请标明出处:http:
//blog.csdn.net/javamxj/archive/2005/08/17/456600.aspx
我的理解:接口注入其实是,通过配置Spring的lookup-method,及返回值 ,可以返回接口中方法的返回值而不需要实现接口中的抽象方法
转载请注明原文地址: https://ju.6miu.com/read-673123.html
技术
最新回复
(
0
)