Spring的常用注解
使用须知
需先在spring核心配置文件注册注解,注册前需要先导入context命名空间
<context:annotation-config/>
@Autowired
根据bean的Type去查找并注入对象,如ioc中只有唯一类型的Cat,Dog对象时, 才能注入成功,如果ioc有两个相同类型的对象,则会在两个类型中找id与需要注入的字段匹配
例如:
先在ioc中注入一个Dog对象
<bean id="dog1" class="com.frw.pojo.Dog">
<property name="name" value="比熊"/>
</bean>
再在实体类中注入Dog对象
public interface Dog {
@Autowired
private Dog dog;
}
此时在容器中Dog类型是唯一的,@Autowired就会根据Type去找IOC中的Bean
如果IOC中有多个Type相同的对象呢?
如此时ioc中有两个dog对象了
<beans>
<bean id="dog2" class="com.frw.pojo.Dog">
<property name="name" value="泰迪"/>
</bean>
<bean id="dog1" class="com.frw.pojo.Dog">
<property name="name" value="比熊"/>
</bean>
</beans>
再去使用@Autowired注入
public interface User {
@Autowired
private Dog dog1;
}
此时会根据注入的字段dog1
与bean的id
相匹配。即把比熊对象注入到User中了
@Qualifier
该注解要和@Autowired搭配使用,作用和上述的根据id匹配一致 当ioc中的同一类型的Bean有多个时,可以用@Qualifier注解来根据id 指定要注入的bean
@Nullable
字段标记了这个注解,说明该字段可以为空
@Resource
java原生注解,跟@Autowired等效
@Component
组件,放在类上,标记该类被Spring托管了,不过要使其生效还需在Spring核心配置文件中配置注解扫描包, 扫描到该类所在的包,默认的id为类名首字母小写
import org.springframework.stereotype.Component;
/*
等价于<bean id="dog" class="com.frw.pojo.Dog">
*/
@Component
public class Dog {
}
@Value
该注解可以为类注入基本类型加String类型
@Component
public class User {
@Value("十里坡剑神")
private String name;
}
@Component 的衍生注解
在我们的web开发中,会使用mvc三层架构分层,为了使我们的注解更加语义化,衍生出了三个注解
注意
其功能与@Component完全一样的,只是更加语义化了。
- dao层 @Repository
- service层 @Service
- controller层 @Controller
@Scope注解
作用在类上,为Bean设置生命周期
以下为常用值
singleton | 单列模式 | 此取值时表明容器中创建时只存在一个实例,所有引用此bean都是单一实例 |
---|---|---|
prototype | 多例模式(原型模式) | spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象给请求方。 |
总结:
xml更加万能,适用于任何场合,维护简单方便
注解 方便快捷,不是自己的类用不了,维护复杂