bean中的属性:
id:表示在Spring的BeanFacotry中的标识,通过这个id去找。
class:表示的是类名
bean的两种注入方式:(把bean注入Spring的bean容器)
一、在xml中配置
又分为三种:
1、属性注入:即通过setXxx()方法注入Bean的属性值或依赖对象
import org.springframework.beans.factory.BeanNameAware;
public class LogonService implements **BeanNameAware**{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setLogDao(LogDao logDao) {
this.logDao = logDao;
}
public LogDao getLogDao() {
return logDao;
}
public UserDao getUserDao() {
return userDao;
}
public void setBeanName(String beanName) {
System.out.println("beanName:"+beanName);
}
public void initMethod1(){
System.out.println("initMethod1");
}
public void initMethod2(){
System.out.println("initMethod2");
}
}
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"
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"
default-autowire="byName"
>
<bean id="userDao" class="com.baobaotao.anno.UserDao"/>
<bean class="com.baobaotao.anno.LogonService">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>
2、构造函数注入:使用构造函数注入的前提是Bean必须提供带参数的构造函数
package com.baobaotao.anno;
import org.springframework.beans.factory.BeanNameAware;
public class LogonService implements BeanNameAware{
private LogDao logDao;
private UserDao userDao;
public LogonService(){}
//必须写
**public LogonService(LogDao logDao, UserDao userDao) {
this.logDao = logDao;
this.userDao = userDao;
}**
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setLogDao(LogDao logDao) {
this.logDao = logDao;
}
public LogDao getLogDao() {
return logDao;
}
public UserDao getUserDao() {
return userDao;
}
}
对应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"
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"
default-autowire="byName">
<bean id="logDao" class="com.baobaotao.anno.LogDao"/>
<bean id="userDao" class="com.baobaotao.anno.UserDao"/>
<bean class="com.baobaotao.anno.LogonService">
<constructor-arg ref="logDao"></constructor-arg>
<constructor-arg ref="userDao"></constructor-arg>
</bean>
</beans>
3、工厂注入
略
二、注解注入
使用@Autowired进行自动注入。或者@Resource(name=”xxx”) 按指定名称
直接写在需要注入的Bean上面即可。
让@Autowired可以生效的几种方式:只要满足一下任意一种都可使用。
1、在xml配置文件中显式指定
<!-- 为了使用Autowired标签,我们必须在这里配置一个bean的后置处理器 -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
<!-- 为了使用@Resource标签,这里必须配置一个后置处理器 -->
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
或
2、在xml配置文件中使用context:annotation-config
<context:annotation-config />
或
3、在xml配置文件中使用context:component-scan
<context:component-scan base-package="com.baobaotao.anno"/>