一、使用注解代替xml的bean配置
1、
(1)类对象的定义配置:
我们先来看一张图:
在spring01中,我们是使用xml中的:
<bean name="user" class="">
<property name="age" value="18"></property>
</bean>
那么,使用注解之后,对照上图,定义对象:
用@Component("user")以及他的衍生类:(使用注解时,如果注解里只有一个属性,且是value的话,属性名value可以省略)
@Controller(web层);
@Service(业务层);
@Repository(持久层,dao层);
比如下列例子,就相当于<bean name="user" class=""></bean>的xml配置:
@Controller("user")
class User{
private String name;
}
衍生类主要是为了让被标注类本身的用途清晰,这4个注解目前的功能是一致的,spring后续会对衍生类注解的功能进行增强。
这些配置类都写在Bean包下的类里,如User类;
(2)修改对象的作用范围(scope属性配置)
如:在类上加注解:@Scope(scopeName=“prototype”)
2、属性的注入
上边介绍了对象的定义这个配置,主要使用4个注解(包含衍生类),注解加在类上,比如User类上:@Controller("user"),user就是用xml配置时的name,class中的name;
下面,介绍属性的注入,即类对象的依赖属性(字段):比如:
(1)值类型的注入
第一种:直接加在属性上,这种方式是通过反射的Field赋值,但是破坏了封装性的原则(直接在私有属性上加)
@Value(“张三”)
private String name; 即给name赋值“张三”
第二种:加在set方法上,通过set方法赋值,推荐使用
@Value(“张三”)
public void setName(String name){
this.name=name;
}
(2)引用类型的注入
比如:
@Component("user")
class User{
@Value(“张三”)
private String name;
@Autowired//自动装配 或者 @Resource(name=“car”)
private Car car;//当然这里这个对象,也要在容器中配置;
}
注:@Autowired和@Resource的区别:
@Autowired 自动装配(没有参数),会根据被标注的引用类型属性(对象)的类型,自动在spring容器中找到符合该类型的对象,并赋值给当前的引用变量,但是只适用于该引用类型的对象只有一个的时候,如果容器中有多个符合该类型(被注解标注的)的对象,那么就需要再加上一个注解:@Qualifier(“car”),组合使用,从而确定到底引用的是哪一个对象;
@Resource(name="car")手动注入,指定要注入哪个对象
(3)初始化/销毁方法的注入
二、spring与junit整合测试
三、结论