这章主要是补充一些ioc建立对象的方式,ioc容器在写好<bean></bean>的时候就已经建立对象了。在以前的例子中,一直都是无参的构造方法。下面给出有参的构造方法的对象的建立,没有什么难点重点,只是记录一下。
有参构造函数构造方法有几种。
第一种方法,经过参数下标来设置。
java代码:java
package cn.sxt.ov; public class User { private String name; private int age; /**有参数函数构造方法*/ public User(String name,int age){ this.name=name; this.age=age; } public void show(){ System.out.println("俺是"+name+",今年"+age); } }
xml文件写法: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 id="user" class="cn.sxt.ov.User"> <constructor-arg index="0" value="张三"/> <constructor-arg index="1" value="18"/> </bean> </beans>
constructor-arg关键字就是用来构造有参函数时传参数的。index是参数的下标,从0开始,<constructor-arg index="0" value="张三"/>就是第一个参数传张三。
第二种,经过名字来传参数,就和之前给变量赋值同样:函数
<?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 id="user" class="cn.sxt.ov.User"> <constructor-arg name="name" value="张三"/> <constructor-arg name="age" value="18"/> </bean> </beans>
第三种,经过参数类型来设置this
<?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 id="user" class="cn.sxt.ov.User"> <constructor-arg type="String" value="吴彦祖"/> <constructor-arg type="int" value="15"/> <constructor-arg type="String" value="男"/> </bean> </beans>
经过参数类型来设置,若是有同样的类型,就按照前后顺序,注意String能够换成java.lang.String。可是int换成java.lang.Integer或者Integer就会报错。不知道为何。code
这里只须要简单了解一下就好了。知道有这么个东西,由于spring自己就提供了工厂类,能够用轮子,干吗造轮子。xml
先写一个简单的静态工厂,这是一个简单的静态工厂,经过newInstance方法来建立对象对象
package cn.sxt.factory; import cn.sxt.ov.User; public class UserFactory { private static User newInstance(String name,int age,String sex){ return new User(name,age,sex); } }
xml代码blog
<bean id="user1" class="cn.sxt.factory.UserFactory" factory-method="newInstance"> <constructor-arg type="String" value="张曼玉"/> <constructor-arg type="int" value="15"/> <constructor-arg type="String" value="女"/> </bean>
结果:
io
新建动态工厂class
package cn.sxt.factory; import cn.sxt.ov.User; public class UserDynamicFactory { private User newInstance(String name,int age,String sex){ return new User(name,age,sex); } }
xml文件,这里须要改一下静态工厂代码,将静态工厂的class改为factory-bean,而后引用动态工厂的id。
<bean id="user1" factory-bean="user2" factory-method="newInstance"> <constructor-arg type="String" value="张曼玉"/> <constructor-arg type="int" value="15"/> <constructor-arg type="String" value="女"/> </bean> <bean id="user2" class="cn.sxt.factory.UserDynamicFactory"> </bean>
注意这里的值仍是在user1里面设置的。