使用注解实现自动装配
属性的注入
User 类的 name 属性
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
@Component
public class User {
@Value("allen") //等价于 <property name="name" value="allen"/>
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
衍生注解
@Component有几个衍生注解,可以按照web开发分为另外三层
- dao【@Repository】
- service【@Service】
- controller【@Controller】
- pojo【@Component】
以上注解,本质一样,都代表将某个类装配到Spring中,装配Bean.
自动装配配置
都是用来自动装配的,都可以放在属性字段上;
@Autowired先通过类型(byType)实现,如果有多个类型,再按照name(byName);
@Resource先通过名字(byName),再通过类型(byType)实现自动装配;
@Autowired 限定名称时需要通过@Qualifier(value=”xxx”)配合使用;
@Nullable,允许属性值为 null 而不报空指针异常。
作用域
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
@Component
//作用域——原型
@Scope("prototype")
public class User {
@Value("allen") //等价于 <property name="name" value="allen"/>
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
小结
xml 与注解:
- xml更加万能,适用于任何场合,维护简单方便;
- 注解不是自己类使用不了,维护相对复杂;
xml 与注解最佳实践:
- xml只用来管理bean(类);
- 注解只负责属性的注入;
注意:如果让注解生效,必须开启注解配置
<!-- 指定注解扫描包 -->
<context:component-scan base-package="com.allen"/>
<!-- 开启注解支持-->
<context:annotation-config/>