Bean的配置
使用自动装配注入依赖关系Bean
Spring能自动装配Bean与Bean之间的依赖关系,即无须使用ref显式指定依赖Bean,而是由Spring容器检查XML配置文件内容,根据某种规则,为调用者Bean注入被依赖的Bean(Bean的id值=类的属性名)。
自动装配的两种方式
1.通过< beans/>元素的default-autowire属性指定,该属性对配置文件中所有的Bean起作用
2.通过对< bean/>元素的autowire属性指定,该属性只对该Bean起作用。
autowire和default-autowire可以接受如下值:
no: 不使用自动装配。Bean依赖必须通过ref元素定义。这是默认配置,在较大的部署环境中不鼓励改变这个配置,显式配置合作者能够得到更清晰的依赖关系。
byName: 根据setter方法名进行自动装配。Spring容器查找容器中全部Bean,找出其id与setter方法名去掉set前缀,并小写首字母后同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。
byType: 根据setter方法的形参类型来自动装配。Spring容器查找容器中的全部Bean,如果正好有一个Bean类型与setter方法的形参类型匹配,就自动注入这个Bean;如果找到多个这样的Bean,就抛出一个异常;如果没有找到这样的Bean,则什么都不会发生,setter方法不会被调用。
constructor: 与byType类似,区别是用于自动匹配构造器的参数。如果容器不能恰好找到一个与构造器参数类型匹配的Bean,则会抛出一个异常。
autodetect: Spring容器根据Bean内部结构,自行决定使用constructor或byType策略。如果找到一个默认的构造函数,那么就会应用byType策略。
注意:自动装配虽然可以减少代码量,但是会降低程序的可读性,使用时需要谨慎。
使用注解定义bean
通过注解的形式 将bean以及相应的属性值 放入ioc容器
在Spring配置文件中做如下配置,指定自动扫描的包:
<context:component-scan base-package="扫描的包名"/>
@Component("studentDao")
public class StudentDaoImpl {
public void addStudent(Student student) {
System.out.println("增加学生...");
}
}
当有类型属性时
@Service("studentService")
public class StudentServiceImpl implements IStudentService{
@Autowired //自动装配 byType
@Qualifier("studentDao") //byName(根据Id值查找)
private IStudentDao studentDao;
}
@Component: 标注一个普通的Spring Bean类
@Controller: 标注一个控制器组件类
@Service: 标注一个业务逻辑组件类
@Repository: 标注一个DAO组件类