Spring bean注入值的方法



Spring bean注入值的方法。1.通过构造函数注入值
beans.xml

<bean id=”employee”>
<!– 通过构造函数来注入属性值 –>
<constructor-arg index=”0″ type=”java.lang.String” value=”大明” />
</bean>

对象类中要声明构造函数

public Employee(String name) {
System.out.println(“Employee(String name) 函数被调用..”);
this.name = name;
}
public Employee() {
System.out.println(“Employee() 函数被调用..”);
}
public Employee(String name, int age) {
System.out.println(“Employee(String name, int age) 函数被调用..”);
this.name = name;
this.age = age;
}
注:spring会根据构造参数的个数自动选择构造函数
2.通过属性值

<bean id=”master”>
<property name=”name”>
<value>如哥</value>
</property>
<property name=”dog”>
<ref bean=”dog”/>//dog为对象
</property>
</bean>
3.自动装配
Spring <wbr>bean注入值的方法(集合在上一篇)
(1)    byName的用法:

<!– 配置一个master对象 –>

<bean id=”master” >

<property name=”name”>

<value>顺平</value>

</property>

</bean>

<!– 配置dog对象 –>

<bean id=”dog”>

<property name=”name” value=”小黄”/>

<property name=”age” value=”3″/>

</bean>

原理图:

Spring <wbr>bean注入值的方法(集合在上一篇)
(2)    byType: byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。

(3)    constructor:

说明 : 查找和bean的构造参数一致的一个或

     多个bean,若找不到或找到多个,抛异常。按照参数的类型装配 

(4) autodetect

说明 : 

(3)和(2)之间选一个方式。不确定

      性的处理与(3)和(2)一致。

(5) defualt

这个需要在<beans defualt-autorwire=“指定” />

当你在<beans >指定了default-atuowrite后, 所有的bean的 默认的autowire就是 指定的装配方法;

如果没有在<beans defualt-autorwire=“指定” /> 没有  defualt-autorwire=“指定” ,则默认是

defualt-autorwire=”no”

(6) no: 不自动装配

二、使用spring的特殊bean,(包括bean生命周期中的接口)
Spring <wbr>bean注入值的方法(集合在上一篇)

 1.分散bean   <context:property-placeholder location=”classpath:com/ru/disperse/db.properties”/>

(1)类对象
DBUtils 

public class DBUtils {

private String url;

private String name;

private String password;

private String drivername;

(2)db.properties属性文件


name=ru

password=123456

url=jdbc:oracle:thin:@127.0.0.1:1521:hsp

drivername=oracle\:jdbc\:driver\:OracleDirver
(3)bean.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<beans xmlns=”http://www.springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=”http://www.springframework.org/schema/context”

xmlns:tx=”http://www.springframework.org/schema/tx”

xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd”>

<!– 分散配置bean通过占位符实现 –>

<context:property-placeholder location=”classpath:com/ru/disperse/db.properties”/>

<bean id=”dbutil” >

<property name=”name”>

<!– 通过占位符实现赋值 –>

<value>${name}</value>

</property>

<property name=”password”>

<value>${password}</value>

</property>

<property name=”url”>

<value>${url}</value>

</property>

<property name=”drivername”>

<value>${drivername}</value>

</property>

</bean>

</beans>

2.这些在bean生命周器可能用到
Spring <wbr>bean注入值的方法(集合在上一篇)
四。使用注解方式注入属性值

1.<!– 如果使用注解注入属性,既要启用注解扫描 –>

<context:annotation-config/>
如果不实用注解方式的话可以这样

<!– <bean id=”employeeService”>

<property name=”sessionFactory” ref=”sessionFactory” />

</bean>–>

2.<!– 配置EmployeeService对象通过注解的方式来注入属性值,这是一个知识点 –>

<bean id=”employeeService”/>
3.在employeeService类中,使用

在EmployeeService 的属性sessionFactory上面添加一个注解 @Resource,这样就是使用byName的方式自动注入