一.采用xml注入:
注:
1.数组类型的注入写法有两种,一种是传统的方法,另一种是采用和List类型一致的方法:
<bean id=".." class="..">
<property name="arr">
<value>c++,java,vb.net</value>
</property>
</bean>
<bean id=".." class="..">
<property name="arr">
<list>
<value>c++</value>
<value>java</value>
<value>vb.net</value>
<list>
</property>
</bean>
2.property类型的也有两种
一种是:
<property name="adminEmails">
<props>
<prop key="administrator">administrator@example.org</prop>
<prop key="support">support@example.org</prop>
<prop key="development">development@example.org</prop>
</props>
</property>
另一种是:
<bean id=".." class="..">
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
</value>
</property>
</bean>
二.采用annotation注入:
(一).使用@Autowired[(required="true|false")]
@Qualifier("beanId")
example:
@Autowired
public void setName(@Qualifier String name){
...
}
注:
1.需要在xml中加上spring-context-*.*.xsd命名空间(只要使用anotation就必须加上这个命名空间)
加上标签:<context:annotation-config/>完整配置如下(key必须放在xsd的前面):
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
</beans>
2.默认按类型,如果需要按id则加上@Qualifier
3.需要在xml文件中配置bean。
(二).使用@Resource
@Resource[(name="beanId")]
public void setName(String name){
...
}
注:
1.需要配置相应类型或id的bean;
2.一般写在方法上面
3.默认按类型查找,如果有两个同一类型的,则会按名字(形参的名字,不是形参类型)查找。
(三).使用@Component(xml中可以免去写bean)
注:
1.xml中需要加上<context:component-scan base-package="org.example">
2.写在类上面
3.默认实例化的名字是类名头字母小写,如果要指定名字:@Component("myName")
(四).@Required
spring容器初始化时必须给注入,一般用在方法上面。
(五).@Scope("prototype|singleton")
写在类名上面
(六).@PostConstruct(= init-method); @PreDestroy (= destroy-method);
(七).xml中bean节点中注明属性<property name=".." ref=""/>name表示的是属性的名字,而不是形参的名字。
@Resource如果按名字找,既可以是形参的名字,也可以是属性的名字
<bean id="userService" class="com.service.UserService">
<property name="userdao" ref="userDao"></property><!-- name是属性的名字,而不是形参的名字 -->
</bean>