- 浏览: 78624 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
lovexz365:
学习了,刚刚遇到这个问题
java.io.CharConversionException:EOF异常 -
胡小米:
liuInsect 写道你这里的内存索引根本就没用嘛... ...
Lucene(NIOFSDirectory、RAMDirectory) -
liuInsect:
你这里的内存索引根本就没用嘛... 都是把索引建立在了硬盘上 ...
Lucene(NIOFSDirectory、RAMDirectory)
1、新建一个java工程名叫DI(依赖注入的意思),加入commons-loggin.jar和spring.jar。注意下面的代码含义见其注释,这里就不再作解释。
2、整个工程测试完后spring配置文件beans.xml文件的代码如下:
Xml代码
<?xml version="1.0" encoding="gbk"?>
<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 name="cipb" class="com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionPropertyBean">
<!--根据类型顺序来匹配,要指定type属性-->
<constructor-arg type="int" value="25"/>
<!--必须是java.lang.String,不能是String,否则会报异常-->
<constructor-arg type="java.lang.String" value="iwtxokhtd"/>
</bean>
<!--用索引可以避免多个同类型的情况,从0开始-->
<bean name="indexProsBean" class="com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionPropertyBean">
<constructor-arg index="0" value="20"/>
<constructor-arg index="1" value="tujiyue"/>
</bean>
<!--构造器注入对象-->
<bean name="ciob" class="com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionObjectBean">
<constructor-arg>
<ref bean="depentedBean"/>
</constructor-arg>
<constructor-arg type="java.lang.String" value="增加一个简单类型"/>
</bean>
<!--被依赖的bean,其属性也采用构造器注入-->
<bean name="depentedBean" class="com.iwtxokhtd.constructor.injection.bean.DepentedObjectConstructorBean">
<!--以下两个属性都是java.lang.String最好用index-->
<constructor-arg type="java.lang.String" value="属性一"/>
<!--下面这种写法与上相同-->
<constructor-arg type="java.lang.String">
<value>属性二</value>
</constructor-arg>
</bean>
<!--setter注入简单类型属性-->
<bean name="sipb" class="com.iwtxokhtd.setter.injection.bean.SetterInjectionPropertyBean">
<property name="id" value="1"/>
<!--这种写法与上一样-->
<property name="name">
<value>iwtxokhtd</value>
</property>
</bean>
<!--setter注入对象类型-->
<bean name="siob" class="com.iwtxokhtd.setter.injection.bean.SetterInjectionObjectBean">
<!--那个简单的类型-->
<property name="year" value="60"/>
<!--对象类型-->
<property name="dosb" ref="depentSetterBean"/>
<!--等价于上面的配置方式-->
<!--
<property name="dosb">
<ref bean="depentSetterBean"/>
</property>
-->
</bean>
<!--被信赖setter注入的对象-->
<bean name="depentSetterBean" class="com.iwtxokhtd.setter.injection.bean.DepentedObjectSetterBean">
<!--两个简单类型的属性-->
<property name="propertyOne" value="setter属性值一"/>
<property name="propertyTwo" value="setter属性值二"/>
</bean>
<!--静态工厂方法参数注入对象-->
<bean name="sfmob" class="com.iwtxokhtd.staticfactory.injection.bean.StaticFactoryMethodObjectBean"
factory-method="createInstance">
<!--语法规则依然是使用构造器注入方式-->
<constructor-arg ref="dfmob"/>
<!--还有一个简单的类型-->
<constructor-arg type="int" value="100"/>
<!--等价形式-->
<!--
<constructor-arg>
<ref bean="dfmob"/>
</constructor-arg>
-->
</bean>
<!--工厂方法依赖注入的对象-->
<bean name="dfmob" class="com.iwtxokhtd.staticfactory.injection.bean.DepentedFactoryMethodObjectBean">
<!--里面有一个简单类型的setter注入-->
<property name="one" value="一个简单的类型"/>
</bean>
<!--InstanceFactoryMethodObjectBean一定要有个默认的构造器-->
<bean name="ifmob" class="com.iwtxokhtd.instancefactory.injection.bean.InstanceFactoryMethodObjectBean"/>
<!--实例工厂方法参数注入对象-->
<bean name="ifmobtest"
factory-bean="ifmob" factory-method="createInstance">
<constructor-arg ref="dfmob"/>
<constructor-arg type="java.lang.String" value="实例工厂方法注入"/>
</bean>
</beans>
3、bean的四种注入方式
第一种注入方式:构造器注入
Java代码
/**
* 构造器注入属性Bean
*/
package com.iwtxokhtd.constructor.injection.bean;
/**
* @author Administrator
*
*/
public class ConstructorInjectionPropertyBean {
//简单类型,依赖的构造器属性
private int age;
private String name;
public ConstructorInjectionPropertyBean(int age, String name) {
this.age = age;
this.name = name;
}
//提供外部访问
public int getAge(){
return age;
}
public String getName(){
return name;
}
}
Java代码
/**
* 构造器注入对象bean
*/
package com.iwtxokhtd.constructor.injection.bean;
/**
* @author Administrator
*
*/
public class ConstructorInjectionObjectBean {
//依赖的对象
private DepentedObjectConstructorBean db;
//也提供一个简单的类型作测试
private String simple;
//注入到构造器中
public ConstructorInjectionObjectBean(DepentedObjectConstructorBean db,String simple) {
this.db = db;
this.simple=simple;
}
//提供外部访问
public DepentedObjectConstructorBean getDb() {
return db;
}
public String getSimple() {
return simple;
}
}
Java代码
/**
* 被信赖的对象bean
*/
package com.iwtxokhtd.constructor.injection.bean;
/**
* @author Administrator
*
*/
public class DepentedObjectConstructorBean {
private String paramOne;
private String paramTwo;
public DepentedObjectConstructorBean(String paramOne, String paramTwo) {
this.paramOne = paramOne;
this.paramTwo = paramTwo;
}
//提供外部访问
public String getParamOne() {
return paramOne;
}
public String getParamTwo() {
return paramTwo;
}
}
第二种注入方式:setter注入
Java代码
/**
* setter注入简单类型属性bean
*/
package com.iwtxokhtd.setter.injection.bean;
/**
* @author Administrator
*
*/
public class SetterInjectionPropertyBean {
//依赖的属性1
private int id;
private String name;
public int getId() {
return id;
}
//setter注入
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
//setter注入
public void setName(String name) {
this.name = name;
}
}
Java代码
/**
* setter注入对象类型bean
*/
package com.iwtxokhtd.setter.injection.bean;
/**
* @author Administrator
*
*/
public class SetterInjectionObjectBean {
//依赖setter注入的对象
private DepentedObjectSetterBean dosb;
//也提供一个简单的类型
private int year;
public DepentedObjectSetterBean getDosb() {
return dosb;
}
public void setDosb(DepentedObjectSetterBean dosb) {
this.dosb = dosb;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
Java代码
/**
* 被依赖setter注入的对象bean
*/
package com.iwtxokhtd.setter.injection.bean;
/**
* @author Administrator
*
*/
public class DepentedObjectSetterBean {
//提供两个简单的类型,也用setter注入
private String propertyOne;
private String propertyTwo;
public String getPropertyOne() {
return propertyOne;
}
public void setPropertyOne(String propertyOne) {
this.propertyOne = propertyOne;
}
public String getPropertyTwo() {
return propertyTwo;
}
public void setPropertyTwo(String propertyTwo) {
this.propertyTwo = propertyTwo;
}
}
第三种注入方式:静态工厂方法参数注入
Java代码
/**
* 静态工厂方法构造注入参数
*/
package com.iwtxokhtd.staticfactory.injection.bean;
/**
* @author Administrator
*
*/
public class StaticFactoryMethodObjectBean {
//依赖静态工作方法注入的对象
private DepentedFactoryMethodObjectBean dsfmob;
//提供一个简单类型的属性
private int property;
//私有的构造器
private StaticFactoryMethodObjectBean(DepentedFactoryMethodObjectBean dsfmob,int property){
this.dsfmob=dsfmob;
this.property=property;
}
//静态工厂方法
public static StaticFactoryMethodObjectBean createInstance(DepentedFactoryMethodObjectBean dsfmob,int property){
StaticFactoryMethodObjectBean smob=new StaticFactoryMethodObjectBean(dsfmob,property);
return smob;
}
//提供外部访问
public DepentedFactoryMethodObjectBean getDsfmob() {
return dsfmob;
}
public int getProperty() {
return property;
}
}
Java代码
/**
* 被依赖静态工厂方法注入的对象
*/
package com.iwtxokhtd.staticfactory.injection.bean;
/**
* @author Administrator
*
*/
public class DepentedFactoryMethodObjectBean {
//提供一个简单的对象类型作为测试用
private String one;
public String getOne() {
return one;
}
//用setter注入
public void setOne(String one) {
this.one = one;
}
}
第四种注入方式:实例工厂方法参数注入
Java代码
/**
* 实例工厂方法构造注入对象bean
*/
package com.iwtxokhtd.instancefactory.injection.bean;
import com.iwtxokhtd.staticfactory.injection.bean.DepentedFactoryMethodObjectBean;
/**
* @author Administrator
*
*/
public class InstanceFactoryMethodObjectBean {
//依赖的对象
private DepentedFactoryMethodObjectBean dfmob;
//提供一个简单的类型
private String two;
//这个默认的空构造器不能少,否则bean会创建失败
private InstanceFactoryMethodObjectBean(){
}
//私有的构造器
private InstanceFactoryMethodObjectBean(DepentedFactoryMethodObjectBean dfmob,String two){
this.dfmob=dfmob;
this.two=two;
}
//实例工厂方法
public InstanceFactoryMethodObjectBean createInstance(DepentedFactoryMethodObjectBean dfmob,String two){
InstanceFactoryMethodObjectBean ifmob=new InstanceFactoryMethodObjectBean(dfmob,two);
return ifmob;
}
public DepentedFactoryMethodObjectBean getDfmob() {
return dfmob;
}
public String getTwo() {
return two;
}
}
客户端测试:
Java代码
/**
* 构造器注入测试类
*/
package com.iwtxokhtd.constructor.injection.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionObjectBean;
import com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionPropertyBean;
import com.iwtxokhtd.instancefactory.injection.bean.InstanceFactoryMethodObjectBean;
import com.iwtxokhtd.setter.injection.bean.SetterInjectionObjectBean;
import com.iwtxokhtd.setter.injection.bean.SetterInjectionPropertyBean;
import com.iwtxokhtd.staticfactory.injection.bean.StaticFactoryMethodObjectBean;
/**
* @author Administrator
*
*/
public class InjectionTest {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
System.out.println("构造器注入属性,配置时指定type属性");
//取得bean
ConstructorInjectionPropertyBean cipb=(ConstructorInjectionPropertyBean)ac.getBean("cipb");
//打印注入的两个属性值
System.out.println("构造器注入属性之年龄:"+cipb.getAge());
System.out.println("构造器注入属性之姓名:"+cipb.getName());
//用索引设置属性值的方式
System.out.println("构造器注入属性,配置时指定index属性");
cipb=(ConstructorInjectionPropertyBean)ac.getBean("indexProsBean");
//打印注入的两个属性值
System.out.println("构造器注入属性换了索引之年龄:"+cipb.getAge());
System.out.println("构造器注入属性换了索引之姓名:"+cipb.getName());
System.out.println("----------------------------------");
System.out.println("构造器注入对象,也加了个简单类型");
ConstructorInjectionObjectBean ciob=(ConstructorInjectionObjectBean)ac.getBean("ciob");
System.out.println("先访问其注入的简单类型");
System.out.println("构造器注入对象之简单类型:"+ciob.getSimple());
System.out.println("再访问其注入的对象类型");
System.out.println("其注入对象的第一个注入的属性值:"+ciob.getDb().getParamOne());
System.out.println("其注入对象的第二个注入的属性值:"+ciob.getDb().getParamTwo());
System.out.println("----------------------------------");
System.out.println("Setter方法注入简单类型属性");
SetterInjectionPropertyBean sipb=(SetterInjectionPropertyBean)ac.getBean("sipb");
System.out.println("setter注入简单类型属性id:"+sipb.getId());
System.out.println("setter注入简单类型属性name:"+sipb.getName());
System.out.println("----------------------------------");
System.out.println("Setter方法注入对象类型,也加了一个简单的属性");
SetterInjectionObjectBean siob=(SetterInjectionObjectBean)ac.getBean("siob");
System.out.println("先访问setter注入的简单类型");
System.out.println("setter注入对象之简单类型:"+siob.getYear());
System.out.println("再访问setter注入的对象类型");
System.out.println("setter注入对象的第一个注入的属性值:"+siob.getDosb().getPropertyOne());
System.out.println("setter注入对象的第二个注入的属性值:"+siob.getDosb().getPropertyTwo());
System.out.println("----------------------------------");
System.out.println("静态工厂方法注入对象类型,也加了一个简单的属性");
StaticFactoryMethodObjectBean sfmob=(StaticFactoryMethodObjectBean)ac.getBean("sfmob");
System.out.println("先访问静态工厂方法注入的简单类型");
System.out.println("静态工厂方法注入对象之简单类型:"+sfmob.getProperty());
System.out.println("再访问静态工厂方法注入的对象类型");
System.out.println("静态工厂方法注入对象所注入的属性值:"+sfmob.getDsfmob().getOne());
System.out.println("----------------------------------");
System.out.println("实例工厂方法注入对象类型,也加了一个简单的属性");
InstanceFactoryMethodObjectBean ifmob=(InstanceFactoryMethodObjectBean)ac.getBean("ifmobtest");
System.out.println("先访问实例工厂方法注入的简单类型");
System.out.println("实例工厂方法注入对象之简单类型:"+ifmob.getTwo());
System.out.println("再访问实例工厂方法注入的对象类型");
System.out.println("实例工厂方法注入对象所注入的属性值:"+ifmob.getDfmob().getOne());
}
}
测试结果:请对照beans.xml文件来验证结果
构造器注入属性,配置时指定type属性
构造器注入属性之年龄:25
构造器注入属性之姓名:iwtxokhtd
构造器注入属性,配置时指定index属性
构造器注入属性换了索引之年龄:20
构造器注入属性换了索引之姓名:tujiyue
----------------------------------
构造器注入对象,也加了个简单类型
先访问其注入的简单类型
构造器注入对象之简单类型:增加一个简单类型
再访问其注入的对象类型
其注入对象的第一个注入的属性值:属性一
其注入对象的第二个注入的属性值:属性二
----------------------------------
Setter方法注入简单类型属性
setter注入简单类型属性id:1
setter注入简单类型属性name:iwtxokhtd
----------------------------------
Setter方法注入对象类型,也加了一个简单的属性
先访问setter注入的简单类型
setter注入对象之简单类型:60
再访问setter注入的对象类型
setter注入对象的第一个注入的属性值:setter属性值一
setter注入对象的第二个注入的属性值:setter属性值二
----------------------------------
静态工厂方法注入对象类型,也加了一个简单的属性
先访问静态工厂方法注入的简单类型
静态工厂方法注入对象之简单类型:100
再访问静态工厂方法注入的对象类型
静态工厂方法注入对象所注入的属性值:一个简单的类型
----------------------------------
实例工厂方法注入对象类型,也加了一个简单的属性
先访问实例工厂方法注入的简单类型
实例工厂方法注入对象之简单类型:实例工厂方法注入
再访问实例工厂方法注入的对象类型
实例工厂方法注入对象所注入的属性值:一个简单的类型
2、整个工程测试完后spring配置文件beans.xml文件的代码如下:
Xml代码
<?xml version="1.0" encoding="gbk"?>
<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 name="cipb" class="com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionPropertyBean">
<!--根据类型顺序来匹配,要指定type属性-->
<constructor-arg type="int" value="25"/>
<!--必须是java.lang.String,不能是String,否则会报异常-->
<constructor-arg type="java.lang.String" value="iwtxokhtd"/>
</bean>
<!--用索引可以避免多个同类型的情况,从0开始-->
<bean name="indexProsBean" class="com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionPropertyBean">
<constructor-arg index="0" value="20"/>
<constructor-arg index="1" value="tujiyue"/>
</bean>
<!--构造器注入对象-->
<bean name="ciob" class="com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionObjectBean">
<constructor-arg>
<ref bean="depentedBean"/>
</constructor-arg>
<constructor-arg type="java.lang.String" value="增加一个简单类型"/>
</bean>
<!--被依赖的bean,其属性也采用构造器注入-->
<bean name="depentedBean" class="com.iwtxokhtd.constructor.injection.bean.DepentedObjectConstructorBean">
<!--以下两个属性都是java.lang.String最好用index-->
<constructor-arg type="java.lang.String" value="属性一"/>
<!--下面这种写法与上相同-->
<constructor-arg type="java.lang.String">
<value>属性二</value>
</constructor-arg>
</bean>
<!--setter注入简单类型属性-->
<bean name="sipb" class="com.iwtxokhtd.setter.injection.bean.SetterInjectionPropertyBean">
<property name="id" value="1"/>
<!--这种写法与上一样-->
<property name="name">
<value>iwtxokhtd</value>
</property>
</bean>
<!--setter注入对象类型-->
<bean name="siob" class="com.iwtxokhtd.setter.injection.bean.SetterInjectionObjectBean">
<!--那个简单的类型-->
<property name="year" value="60"/>
<!--对象类型-->
<property name="dosb" ref="depentSetterBean"/>
<!--等价于上面的配置方式-->
<!--
<property name="dosb">
<ref bean="depentSetterBean"/>
</property>
-->
</bean>
<!--被信赖setter注入的对象-->
<bean name="depentSetterBean" class="com.iwtxokhtd.setter.injection.bean.DepentedObjectSetterBean">
<!--两个简单类型的属性-->
<property name="propertyOne" value="setter属性值一"/>
<property name="propertyTwo" value="setter属性值二"/>
</bean>
<!--静态工厂方法参数注入对象-->
<bean name="sfmob" class="com.iwtxokhtd.staticfactory.injection.bean.StaticFactoryMethodObjectBean"
factory-method="createInstance">
<!--语法规则依然是使用构造器注入方式-->
<constructor-arg ref="dfmob"/>
<!--还有一个简单的类型-->
<constructor-arg type="int" value="100"/>
<!--等价形式-->
<!--
<constructor-arg>
<ref bean="dfmob"/>
</constructor-arg>
-->
</bean>
<!--工厂方法依赖注入的对象-->
<bean name="dfmob" class="com.iwtxokhtd.staticfactory.injection.bean.DepentedFactoryMethodObjectBean">
<!--里面有一个简单类型的setter注入-->
<property name="one" value="一个简单的类型"/>
</bean>
<!--InstanceFactoryMethodObjectBean一定要有个默认的构造器-->
<bean name="ifmob" class="com.iwtxokhtd.instancefactory.injection.bean.InstanceFactoryMethodObjectBean"/>
<!--实例工厂方法参数注入对象-->
<bean name="ifmobtest"
factory-bean="ifmob" factory-method="createInstance">
<constructor-arg ref="dfmob"/>
<constructor-arg type="java.lang.String" value="实例工厂方法注入"/>
</bean>
</beans>
3、bean的四种注入方式
第一种注入方式:构造器注入
Java代码
/**
* 构造器注入属性Bean
*/
package com.iwtxokhtd.constructor.injection.bean;
/**
* @author Administrator
*
*/
public class ConstructorInjectionPropertyBean {
//简单类型,依赖的构造器属性
private int age;
private String name;
public ConstructorInjectionPropertyBean(int age, String name) {
this.age = age;
this.name = name;
}
//提供外部访问
public int getAge(){
return age;
}
public String getName(){
return name;
}
}
Java代码
/**
* 构造器注入对象bean
*/
package com.iwtxokhtd.constructor.injection.bean;
/**
* @author Administrator
*
*/
public class ConstructorInjectionObjectBean {
//依赖的对象
private DepentedObjectConstructorBean db;
//也提供一个简单的类型作测试
private String simple;
//注入到构造器中
public ConstructorInjectionObjectBean(DepentedObjectConstructorBean db,String simple) {
this.db = db;
this.simple=simple;
}
//提供外部访问
public DepentedObjectConstructorBean getDb() {
return db;
}
public String getSimple() {
return simple;
}
}
Java代码
/**
* 被信赖的对象bean
*/
package com.iwtxokhtd.constructor.injection.bean;
/**
* @author Administrator
*
*/
public class DepentedObjectConstructorBean {
private String paramOne;
private String paramTwo;
public DepentedObjectConstructorBean(String paramOne, String paramTwo) {
this.paramOne = paramOne;
this.paramTwo = paramTwo;
}
//提供外部访问
public String getParamOne() {
return paramOne;
}
public String getParamTwo() {
return paramTwo;
}
}
第二种注入方式:setter注入
Java代码
/**
* setter注入简单类型属性bean
*/
package com.iwtxokhtd.setter.injection.bean;
/**
* @author Administrator
*
*/
public class SetterInjectionPropertyBean {
//依赖的属性1
private int id;
private String name;
public int getId() {
return id;
}
//setter注入
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
//setter注入
public void setName(String name) {
this.name = name;
}
}
Java代码
/**
* setter注入对象类型bean
*/
package com.iwtxokhtd.setter.injection.bean;
/**
* @author Administrator
*
*/
public class SetterInjectionObjectBean {
//依赖setter注入的对象
private DepentedObjectSetterBean dosb;
//也提供一个简单的类型
private int year;
public DepentedObjectSetterBean getDosb() {
return dosb;
}
public void setDosb(DepentedObjectSetterBean dosb) {
this.dosb = dosb;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
Java代码
/**
* 被依赖setter注入的对象bean
*/
package com.iwtxokhtd.setter.injection.bean;
/**
* @author Administrator
*
*/
public class DepentedObjectSetterBean {
//提供两个简单的类型,也用setter注入
private String propertyOne;
private String propertyTwo;
public String getPropertyOne() {
return propertyOne;
}
public void setPropertyOne(String propertyOne) {
this.propertyOne = propertyOne;
}
public String getPropertyTwo() {
return propertyTwo;
}
public void setPropertyTwo(String propertyTwo) {
this.propertyTwo = propertyTwo;
}
}
第三种注入方式:静态工厂方法参数注入
Java代码
/**
* 静态工厂方法构造注入参数
*/
package com.iwtxokhtd.staticfactory.injection.bean;
/**
* @author Administrator
*
*/
public class StaticFactoryMethodObjectBean {
//依赖静态工作方法注入的对象
private DepentedFactoryMethodObjectBean dsfmob;
//提供一个简单类型的属性
private int property;
//私有的构造器
private StaticFactoryMethodObjectBean(DepentedFactoryMethodObjectBean dsfmob,int property){
this.dsfmob=dsfmob;
this.property=property;
}
//静态工厂方法
public static StaticFactoryMethodObjectBean createInstance(DepentedFactoryMethodObjectBean dsfmob,int property){
StaticFactoryMethodObjectBean smob=new StaticFactoryMethodObjectBean(dsfmob,property);
return smob;
}
//提供外部访问
public DepentedFactoryMethodObjectBean getDsfmob() {
return dsfmob;
}
public int getProperty() {
return property;
}
}
Java代码
/**
* 被依赖静态工厂方法注入的对象
*/
package com.iwtxokhtd.staticfactory.injection.bean;
/**
* @author Administrator
*
*/
public class DepentedFactoryMethodObjectBean {
//提供一个简单的对象类型作为测试用
private String one;
public String getOne() {
return one;
}
//用setter注入
public void setOne(String one) {
this.one = one;
}
}
第四种注入方式:实例工厂方法参数注入
Java代码
/**
* 实例工厂方法构造注入对象bean
*/
package com.iwtxokhtd.instancefactory.injection.bean;
import com.iwtxokhtd.staticfactory.injection.bean.DepentedFactoryMethodObjectBean;
/**
* @author Administrator
*
*/
public class InstanceFactoryMethodObjectBean {
//依赖的对象
private DepentedFactoryMethodObjectBean dfmob;
//提供一个简单的类型
private String two;
//这个默认的空构造器不能少,否则bean会创建失败
private InstanceFactoryMethodObjectBean(){
}
//私有的构造器
private InstanceFactoryMethodObjectBean(DepentedFactoryMethodObjectBean dfmob,String two){
this.dfmob=dfmob;
this.two=two;
}
//实例工厂方法
public InstanceFactoryMethodObjectBean createInstance(DepentedFactoryMethodObjectBean dfmob,String two){
InstanceFactoryMethodObjectBean ifmob=new InstanceFactoryMethodObjectBean(dfmob,two);
return ifmob;
}
public DepentedFactoryMethodObjectBean getDfmob() {
return dfmob;
}
public String getTwo() {
return two;
}
}
客户端测试:
Java代码
/**
* 构造器注入测试类
*/
package com.iwtxokhtd.constructor.injection.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionObjectBean;
import com.iwtxokhtd.constructor.injection.bean.ConstructorInjectionPropertyBean;
import com.iwtxokhtd.instancefactory.injection.bean.InstanceFactoryMethodObjectBean;
import com.iwtxokhtd.setter.injection.bean.SetterInjectionObjectBean;
import com.iwtxokhtd.setter.injection.bean.SetterInjectionPropertyBean;
import com.iwtxokhtd.staticfactory.injection.bean.StaticFactoryMethodObjectBean;
/**
* @author Administrator
*
*/
public class InjectionTest {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
System.out.println("构造器注入属性,配置时指定type属性");
//取得bean
ConstructorInjectionPropertyBean cipb=(ConstructorInjectionPropertyBean)ac.getBean("cipb");
//打印注入的两个属性值
System.out.println("构造器注入属性之年龄:"+cipb.getAge());
System.out.println("构造器注入属性之姓名:"+cipb.getName());
//用索引设置属性值的方式
System.out.println("构造器注入属性,配置时指定index属性");
cipb=(ConstructorInjectionPropertyBean)ac.getBean("indexProsBean");
//打印注入的两个属性值
System.out.println("构造器注入属性换了索引之年龄:"+cipb.getAge());
System.out.println("构造器注入属性换了索引之姓名:"+cipb.getName());
System.out.println("----------------------------------");
System.out.println("构造器注入对象,也加了个简单类型");
ConstructorInjectionObjectBean ciob=(ConstructorInjectionObjectBean)ac.getBean("ciob");
System.out.println("先访问其注入的简单类型");
System.out.println("构造器注入对象之简单类型:"+ciob.getSimple());
System.out.println("再访问其注入的对象类型");
System.out.println("其注入对象的第一个注入的属性值:"+ciob.getDb().getParamOne());
System.out.println("其注入对象的第二个注入的属性值:"+ciob.getDb().getParamTwo());
System.out.println("----------------------------------");
System.out.println("Setter方法注入简单类型属性");
SetterInjectionPropertyBean sipb=(SetterInjectionPropertyBean)ac.getBean("sipb");
System.out.println("setter注入简单类型属性id:"+sipb.getId());
System.out.println("setter注入简单类型属性name:"+sipb.getName());
System.out.println("----------------------------------");
System.out.println("Setter方法注入对象类型,也加了一个简单的属性");
SetterInjectionObjectBean siob=(SetterInjectionObjectBean)ac.getBean("siob");
System.out.println("先访问setter注入的简单类型");
System.out.println("setter注入对象之简单类型:"+siob.getYear());
System.out.println("再访问setter注入的对象类型");
System.out.println("setter注入对象的第一个注入的属性值:"+siob.getDosb().getPropertyOne());
System.out.println("setter注入对象的第二个注入的属性值:"+siob.getDosb().getPropertyTwo());
System.out.println("----------------------------------");
System.out.println("静态工厂方法注入对象类型,也加了一个简单的属性");
StaticFactoryMethodObjectBean sfmob=(StaticFactoryMethodObjectBean)ac.getBean("sfmob");
System.out.println("先访问静态工厂方法注入的简单类型");
System.out.println("静态工厂方法注入对象之简单类型:"+sfmob.getProperty());
System.out.println("再访问静态工厂方法注入的对象类型");
System.out.println("静态工厂方法注入对象所注入的属性值:"+sfmob.getDsfmob().getOne());
System.out.println("----------------------------------");
System.out.println("实例工厂方法注入对象类型,也加了一个简单的属性");
InstanceFactoryMethodObjectBean ifmob=(InstanceFactoryMethodObjectBean)ac.getBean("ifmobtest");
System.out.println("先访问实例工厂方法注入的简单类型");
System.out.println("实例工厂方法注入对象之简单类型:"+ifmob.getTwo());
System.out.println("再访问实例工厂方法注入的对象类型");
System.out.println("实例工厂方法注入对象所注入的属性值:"+ifmob.getDfmob().getOne());
}
}
测试结果:请对照beans.xml文件来验证结果
构造器注入属性,配置时指定type属性
构造器注入属性之年龄:25
构造器注入属性之姓名:iwtxokhtd
构造器注入属性,配置时指定index属性
构造器注入属性换了索引之年龄:20
构造器注入属性换了索引之姓名:tujiyue
----------------------------------
构造器注入对象,也加了个简单类型
先访问其注入的简单类型
构造器注入对象之简单类型:增加一个简单类型
再访问其注入的对象类型
其注入对象的第一个注入的属性值:属性一
其注入对象的第二个注入的属性值:属性二
----------------------------------
Setter方法注入简单类型属性
setter注入简单类型属性id:1
setter注入简单类型属性name:iwtxokhtd
----------------------------------
Setter方法注入对象类型,也加了一个简单的属性
先访问setter注入的简单类型
setter注入对象之简单类型:60
再访问setter注入的对象类型
setter注入对象的第一个注入的属性值:setter属性值一
setter注入对象的第二个注入的属性值:setter属性值二
----------------------------------
静态工厂方法注入对象类型,也加了一个简单的属性
先访问静态工厂方法注入的简单类型
静态工厂方法注入对象之简单类型:100
再访问静态工厂方法注入的对象类型
静态工厂方法注入对象所注入的属性值:一个简单的类型
----------------------------------
实例工厂方法注入对象类型,也加了一个简单的属性
先访问实例工厂方法注入的简单类型
实例工厂方法注入对象之简单类型:实例工厂方法注入
再访问实例工厂方法注入的对象类型
实例工厂方法注入对象所注入的属性值:一个简单的类型
发表评论
-
Spring常见问题整理(持续更新)
2011-10-28 15:05 7091.常见错误一 控制台输出: [ERROR] java.l ... -
<context-param>与<init-param>的区别与作用
2011-10-14 10:33 5971. 启动一个WEB项目的时候,容器(如:Tomcat)会去读 ... -
web容器加载Spring配置文件
2011-10-13 16:35 1839首先我们都知道要在web项目中通过容器自动加载spring的配 ... -
ApplicationContext(转)
2011-09-28 09:51 686引用 对于ClassPathXmlApplicationCon ... -
(转载)使用constructor-arg子标签,来指定构造函数的参数
2011-09-15 10:29 1086[color=violet][/color] Sprin ... -
Spring AOP 详解(转载)
2011-09-13 18:30 613此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没 ... -
详解spring事务属性(转载)
2011-09-13 18:16 598Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我 ... -
spring入门编程问题集锦(转载)
2011-09-13 18:06 5531、如何学习Spring? 你可以通过下列途径学习sprin ...
相关推荐
自动注入是指Spring框架能够根据bean的依赖关系,自动地将所需的其他bean注入到目标bean中,无需在代码中使用new操作符创建对象。Spring支持多种注入方式,包括构造器注入、设值注入和接口注入。 在Spring 2.5中,...
在 Spring 2.5 中,有两种主要的配置方式: - **XML 配置**: 这是 Spring 早期版本的主要配置方式,通过 `<bean>` 元素定义组件,并使用 `<property>` 或 `<constructor-arg>` 描述其依赖。 - **注解配置**: Spring...
《精通Spring2.5》是一本深度探讨Spring框架的权威指南,主要针对Spring 2.5版本进行深入解析。Spring是Java企业级应用开发中最受欢迎的框架之一,它以其轻量级、模块化的设计,以及对IoC(Inversion of Control,...
Spring的核心特性之一是依赖注入(Dependency Injection,简称DI),也被称为控制反转(Inversion of Control,IoC)。DI允许开发者声明他们所需的依赖关系,而无需手动创建对象或管理这些依赖关系。通过配置文件或...
在Spring 2.5中,对Bean的元数据支持更丰富,包括属性、构造器、工厂方法等的注入方式,同时增强了对JSR-250注解的支持,如`@PostConstruct`和`@PreDestroy`。 4. **Web包**:Spring 2.5的Web模块提供了一个全面的...
这个"Spring2.5-中文参考手册chm.zip"文件包含了关于Spring 2.5版本的详细中文指南,对于学习和理解Spring框架具有很高的价值。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程...
Spring2.5是全面的企业级应用框架,它不仅包含IoC(Inversion of Control,控制反转)容器,用于管理对象的生命周期和依赖关系,还提供了AOP(Aspect-Oriented Programming,面向切面编程)功能,实现了对横切关注点...
1. **IoC(Inversion of Control)容器**:Spring 的核心特性是依赖注入(Dependency Injection,DI),通过 IoC 容器来管理对象的生命周期和对象之间的依赖关系。IoC 容器通过 XML 配置文件或注解(如 @Autowired)...
在Spring2.5中,IoC容器支持通过XML配置文件或注解的方式定义和管理Bean之间的依赖关系。 #### 三、Bean定义与管理 - **Bean定义**:Spring框架中的Bean是应用程序的基本组成部分,它们通常代表业务实体或服务组件...
3. **依赖注入(DI)**:依赖注入是IoC的一种实现方式,它允许容器在运行时动态地将依赖对象注入到需要它们的组件中。可以通过构造函数或setter方法实现注入,从而实现组件间的解耦。 4. **Spring管理Bean的原理**...
本实例是针对Spring 2.5与Hibernate集成的实战演示,旨在展示如何利用Spring的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)容器来管理Bean,并通过Spring的面向切面编程...
在2.5版本中,支持XML和注解两种方式来定义Bean及其属性。 3. **AOP(Aspect-Oriented Programming,面向切面编程)**:Spring的AOP模块允许开发者定义切面,将横切关注点(如日志、事务管理)与业务逻辑分离。切面...
在 Spring Boot 中,注入是一种非常重要的机制,用于将 bean 对象注入到其他 bean 对象中,以便实现松耦合和高内聚的设计目标。下面我们将对 Spring Boot 中的几种注入方法进行详细的介绍和分析。 1. @Autowired @...
【标题】"cxf+Spring2.5" 指的是使用Apache CXF框架与Spring 2.5版本进行集成的示例项目。Apache CXF是一个开源服务框架,它允许开发人员创建和消费Web服务,而Spring框架则是一个广泛使用的Java企业级应用的IOC...
在Spring IOC中,主要的注入方式有以下几种: 1. **构造器注入**:通过构造函数传递依赖对象,Spring容器会根据构造函数的参数类型创建并注入相应的对象。这种方式确保对象在创建时就具备所有依赖,增强了对象的...
《Spring2.5视频教程:编码剖析Spring管理Bean的原理》是由知名教育机构黑马程序员的讲师黎活明主讲的一套教程,旨在深入解析Spring框架2.5版本中Bean的管理机制。本教程通过实际编码演示,帮助学习者理解Spring如何...
1. **依赖注入增强**:在 Spring 2.5 中,依赖注入通过使用 @Autowired 注解得到了加强。这个注解允许开发者自动装配 Bean 的依赖,而无需编写 XML 配置。此外,@Qualifier 注解可以用来指定具体实现的 Bean,当有多...
在ProSpring 2.5中,我们可以看到Spring对于Bean的管理方式,包括Bean的定义、初始化、装配和销毁等过程。源码中展示了如何通过XML配置文件或注解来声明Bean,以及Spring如何解析这些配置,创建Bean实例并管理其生命...
将Axis2与Spring2.5整合的主要好处在于,可以利用Spring的IoC(Inversion of Control,控制反转)和AOP特性来管理和控制Web服务。这使得Web服务的配置和管理更加简便,同时也便于测试和维护。以下是一些整合的关键...
标题“Spring之Spring2.5集成Struts2.2”涉及到的是在Web开发中整合两个非常流行的开源框架——Spring和Struts2的过程。这个过程旨在利用Spring的强大IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...