Spring中Ioc的几种实现体式格式
添加时间:2013-6-21 点击量:
一 setter办法注入
设备文件如下:
<bean id=helloAction class=org.yoo.action.SpringSetterHelloAction>
<!-- setter injection using the nested <ref/> element -->
<property name=helloservice><ref bean=helloService/></property>
<!--可以不设置类型 -->
<property name=name value=yoo></property>
</bean>
action实现类中代码:
private IHelloService helloservice;
private String name ;
public void sayHello(){
helloservice.sayHello();
System.out.println(this.name);
}
public void setHelloservice(IHelloService helloservice) {
this.helloservice = helloservice;
}
public void setName(String name) {
this.name = name;
}
这里的name和helloservice都采取属性的setter办法注入。即类中设置一个全局属性,并对属性有setter办法,以供容器注入。
二 机关器注入
spring也支撑机关器注入,也即有些资猜中的机关子或者机关函数注入。
先看设备文件:
<!--通俗机关器注入-->
<bean id=helloAction class=org.yoo.action.ConstructorHelloAction>
<!--type 必须为java.lang.String 因为是按类型匹配的,不是按次序匹配-->
<constructor-arg type=java.lang.String value=yoo/>
<!-- 也可以应用index来匹配-->
<!--<constructor-arg index=1 value=42/>-->
<constructor-arg><ref bean=helloService/></constructor-arg>
</bean>
action实现类中代码:
private HelloServiceImpl helloservice;
private String name ;
public SpringConstructorHelloAction(HelloServiceImpl helloservice,String name){
this.helloservice = helloservice;
this.name = name ;
}
@Override
public void sayHello() {
helloservice.sayHello();
System.out.println(this.name);
}
同样设置2个属性,然后在机关函数中注入。
三静态工厂注入
设备文件如下:
<!--静态工厂机存眷入-->
<!--重视这里的class 带factory-method参数-->
<!--factory-method的值是FactoryHelloAction中的工厂办法名createInstance-->
<bean id=helloAction class=org.yoo.di.FactoryHelloAction factory-method=createInstance>
<constructor-arg type=java.lang.String value=yoo/>
<constructor-arg><ref bean=helloService/></constructor-arg>
</bean>
action实现类:
private HelloServiceImpl helloservice;
private String name = null;
private SpringFactoryHelloAction(String name ,HelloServiceImpl helloservice){
this.helloservice = helloservice ;
this.name = name ;
}
public static SpringFactoryHelloAction createInstance(String name ,HelloServiceImpl helloservice) {
SpringFactoryHelloAction fha = new SpringFactoryHelloAction (name,helloservice);
// some other operations
return fha;
}
@Override
public void sayHello() {
helloservice.sayHello();
System.out.println(this.name);
}
四 无设备文件注入(主动注入)
上方三种办法都须要编写设备文件,在spring2.5中还供给了不编写设备文件的ioc实现。须要重视的是,无设备文件指bean之间依附,不基于设备文件,而不是指没有spring设备文件。
设备文件如下:
<?xml version=1.0 encoding=UTF-8?>
<beans xmlns=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd>
<bean class=org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor/>
<bean id=helloService class=org.yoo.service.HelloServiceImpl>
</bean>
<bean id=helloAction class=org.yoo.action.AutowiredHelloAction>
</bean>
</beans>
可见上方只是设置了helloService和helloAction两个bean,并没有设置helloAction对helloService的依附。
别的<bean class=org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor/>是必须的,有此才支撑主动注入。
action实现类:
/
属性主动装载
/
/
@Autowired
private HelloService helloservice;
@Override
public void sayHello() {
helloservice.sayHello();
。
上方代码很简单,在属性上加上 @Autowired注释,spring会主动注入HelloService 。
同样也支撑机关器和setteer办法的注入,如下:
机关器主动注入:
/
还可以应用机关函数设置
/
@Autowired
public SpringAutowiredHelloAction(HelloServiceImpl helloservice){
this.helloservice = helloservice;
}
setter办法主动注入:
/
也可以应用set办法设置
/
/
@Autowired
public void setHelloservice(HelloService helloservice) {
this.helloservice = helloservice;
}
最后在spring的reference文档中有提到,若是不应用主动注入,尽量应用setter办法,一般通用的也是应用setter办法。
而应用主动注入还是设备文件体式格式,若是jdk低于1.5或者spring不是2.5,就只可以或许应用设备文件体式格式了。其它的就看实际项目选择了。
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
一 setter办法注入
设备文件如下:
<bean id=helloAction class=org.yoo.action.SpringSetterHelloAction>
<!-- setter injection using the nested <ref/> element -->
<property name=helloservice><ref bean=helloService/></property>
<!--可以不设置类型 -->
<property name=name value=yoo></property>
</bean>
action实现类中代码:
private IHelloService helloservice;
private String name ;
public void sayHello(){
helloservice.sayHello();
System.out.println(this.name);
}
public void setHelloservice(IHelloService helloservice) {
this.helloservice = helloservice;
}
public void setName(String name) {
this.name = name;
}
这里的name和helloservice都采取属性的setter办法注入。即类中设置一个全局属性,并对属性有setter办法,以供容器注入。
二 机关器注入
spring也支撑机关器注入,也即有些资猜中的机关子或者机关函数注入。
先看设备文件:
<!--通俗机关器注入-->
<bean id=helloAction class=org.yoo.action.ConstructorHelloAction>
<!--type 必须为java.lang.String 因为是按类型匹配的,不是按次序匹配-->
<constructor-arg type=java.lang.String value=yoo/>
<!-- 也可以应用index来匹配-->
<!--<constructor-arg index=1 value=42/>-->
<constructor-arg><ref bean=helloService/></constructor-arg>
</bean>
action实现类中代码:
private HelloServiceImpl helloservice;
private String name ;
public SpringConstructorHelloAction(HelloServiceImpl helloservice,String name){
this.helloservice = helloservice;
this.name = name ;
}
@Override
public void sayHello() {
helloservice.sayHello();
System.out.println(this.name);
}
同样设置2个属性,然后在机关函数中注入。
三静态工厂注入
设备文件如下:
<!--静态工厂机存眷入-->
<!--重视这里的class 带factory-method参数-->
<!--factory-method的值是FactoryHelloAction中的工厂办法名createInstance-->
<bean id=helloAction class=org.yoo.di.FactoryHelloAction factory-method=createInstance>
<constructor-arg type=java.lang.String value=yoo/>
<constructor-arg><ref bean=helloService/></constructor-arg>
</bean>
action实现类:
private HelloServiceImpl helloservice;
private String name = null;
private SpringFactoryHelloAction(String name ,HelloServiceImpl helloservice){
this.helloservice = helloservice ;
this.name = name ;
}
public static SpringFactoryHelloAction createInstance(String name ,HelloServiceImpl helloservice) {
SpringFactoryHelloAction fha = new SpringFactoryHelloAction (name,helloservice);
// some other operations
return fha;
}
@Override
public void sayHello() {
helloservice.sayHello();
System.out.println(this.name);
}
四 无设备文件注入(主动注入)
上方三种办法都须要编写设备文件,在spring2.5中还供给了不编写设备文件的ioc实现。须要重视的是,无设备文件指bean之间依附,不基于设备文件,而不是指没有spring设备文件。
设备文件如下:
<?xml version=1.0 encoding=UTF-8?>
<beans xmlns=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd>
<bean class=org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor/>
<bean id=helloService class=org.yoo.service.HelloServiceImpl>
</bean>
<bean id=helloAction class=org.yoo.action.AutowiredHelloAction>
</bean>
</beans>
可见上方只是设置了helloService和helloAction两个bean,并没有设置helloAction对helloService的依附。
别的<bean class=org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor/>是必须的,有此才支撑主动注入。
action实现类:
/
属性主动装载
/
/
@Autowired
private HelloService helloservice;
@Override
public void sayHello() {
helloservice.sayHello();
。
上方代码很简单,在属性上加上 @Autowired注释,spring会主动注入HelloService 。
同样也支撑机关器和setteer办法的注入,如下:
机关器主动注入:
/
还可以应用机关函数设置
/
@Autowired
public SpringAutowiredHelloAction(HelloServiceImpl helloservice){
this.helloservice = helloservice;
}
setter办法主动注入:
/
也可以应用set办法设置
/
/
@Autowired
public void setHelloservice(HelloService helloservice) {
this.helloservice = helloservice;
}
最后在spring的reference文档中有提到,若是不应用主动注入,尽量应用setter办法,一般通用的也是应用setter办法。
而应用主动注入还是设备文件体式格式,若是jdk低于1.5或者spring不是2.5,就只可以或许应用设备文件体式格式了。其它的就看实际项目选择了。