Spring
01: Spring简介
02: Spring–Spring组成及拓展
03: Spring–IoC理论推导&IoC本质
04: Spring–第一个Spring程序HelloSpring&修改上节案例
05: Spring–IoC创建对象方式
06: Spring–Spring配置
07: Spring–依赖注入(Dependency Injection)
08: Spring–Bean的作用域
09: Spring–自动装配Bean(使用自动装配xml配置)
10: Spring–使用注解实现自动装配(推荐使用)
11: Spring–注解开发
12: Spring–使用JavaConfig实现配置
13: Spring–静态代理再理解&AOP
14: Spring–AOP(通过 Spring API 实现&自定义类来实现Aop&使用注解实现)
15: Spring–回忆Mybatis
16: Spring–整合Mybatis
17: Spring–Spring声明式事务
1. Spring–自动装配Bean
自动装配是使用spring满足bean依赖的一种方法
spring会在应用上下文中为某个bean寻找其依赖的bean。 Spring中bean有三种装配机制,分别是:
- 在xml中显式配置;
- 在java中显式配置;
- 隐式的bean发现机制和自动装配。
这里我们主要讲第三种:自动化的装配bean。
Spring的自动装配需要从两个角度来实现,或者说是两个操作:
- 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
- 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;
组件扫描和自动装配组合发挥巨大威力,使得显示的配置降低到最少。
1.1 环境搭建
1.1.1 新建一个项目
1.1.2 新建两个实体类,Cat Dog 都有一个叫的方法
Cat.java
public class Cat {
public void shout() {
System.out.println("miao~");
}
}
Dog.java
public class Dog {
public void shout() {
System.out.println("wang~");
}
}
User.java
package com.tian.dao;
public class User {
private Cat cat;
private Dog dog;
private String str;
public void setCat(Cat cat) {
this.cat = cat;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public void setStr(String str) {
this.str = str;
}
public Cat getCat() {
return cat;
}
public Dog getDog() {
return dog;
}
public String getStr() {
return str;
}
@Override
public String toString() {
return "User{" +
"cat=" + cat +
", dog=" + dog +
", str='" + str + '\'' +
'}';
}
}
1.1.3 编写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.xsd">
<bean id="dog" class="com.tian.dao.Dog"/>
<bean id="cat" class="com.tian.dao.Cat"/>
<bean id="user" class="com.tian.dao.User">
<property name="cat" ref="cat"/>
<property name="dog" ref="dog"/>
<property name="str" value="周天天"/>
</bean>
</beans>
1.1.4 测试
Test.java
public class Test {
@org.junit.Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("user");
user.getCat().shout();
user.getDog().shout();
}
}
运行结果:
结果正常输出,环境OK
1.2 autowire byName (按名称自动装配)
由于在手动配置xml过程中,常常发生字母缺漏和大小写等错误,而无法对其进行检查,使得开发效率降低。采用自动装配将避免这些错误,并且使配置简单化。
测试:
1.2.1 修改bean配置,增加一个属性 autowire=“byName”
<bean id="dog" class="com.tian.dao.Dog"/>
<bean id="cat" class="com.tian.dao.Cat"/>
<bean id="user" class="com.tian.dao.User" autowire="byName">
</bean>
1.2.2 测试,运行刚刚的测试程序
1.2.3 小结
1.3 autowire byType (按类型自动装配)
使用autowire byType首先需要保证:同一类型的对象,在spring容器中唯一。如果不唯一,会报不唯一的异常。
1.3.1 修改bean配置
<bean class="com.tian.dao.Dog"/>
<!-- 可以不用指定id 因为是按类型来查找的-->
<bean class="com.tian.dao.Cat"/>
<bean id="user" class="com.tian.dao.User" autowire="byType">
</bean>