本文理出了Spring的常用注解(@Autowired @Qualifier @Required @Service等)以及其使用案例,后面会整理一些JSR-250的常用注解与案例
(1)@Autowired
实现自动装载
用来替换代码里set和get的手动注入函数
public void setEat(LiSpringEatImp obj){
this.eat = obj;
}
public LiSpringEatImp getEat(){
return this.eat;
}
public void setSleep(LiSpringSleepImp obj){
this.sleep = obj;
}
public LiSpringSleepImp getSleep(){
return this.sleep;
}
以及xml文件中
<bean id="liSpringcontrol" class="com.li.spring.control.LiSpringControl">
<!-- property name="eat" ref="liSpringEatImp"/-->
<!-- property name="sleep" ref="liSpringSleepImp"/-->
</bean>
property的属性配置
注意:@ Autowired使用来自动装配class中的property的,当然这个property要在beanfactory中有定义(或者说它要是一个接口或者实现类,要有ref属性),否则,如果是class中的普通属性(如 int String等),还是要通过setget方式注入的
(2)@Qualifier
这是用来实现多态的重要一个注释,判断其到底使用哪一个bean
注意在引入eclipse的时候要看清楚improt导入的文件
需要选择的是下面的一个即:
import org.springframework.beans.factory.annotation.Qualifier;
否则会出现
The annotation @Qualifier is disallowed for this location
这个问题查了一些时间,没想到问题出在这边
官网使用demo如下:
https://www.tutorialspoint.com/spring/spring_qualifier_annotation.htm
如:
@Autowired
@Qualifier("liSpringEatImp2")
private LiSpringServiceEat liSpringEatImp2;
(3)@Autowried和@Required的区别
@Autowried用来装载一个bean, 可以用来装载一个setter函数,这一点和@Required一样,但是其不仅仅局限于此,@Autowried还可以用于装载bean的构造函数,属性,方法参数等其他方面
@Required用来检测特定的属性是否被注入
(4)用于注册bean的注释
需要在applicationContext.xml中加入如下配置:
<context:component-scan base-package="com.li.spring.imp"/>
其中base-package是你的包
@Component, @Service, @Controller or@Repository
这几个都用用来注册bean
@Service对应业务层的bean
@Repository对应数据访问层Bean
@Controller对应表现层的Bean
默认使用类名的首字母小写作为bean名称
如:
@Service("liSpringServiceEatMeat")
publicclassLiSpringEatImp implements LiSpringServiceEat
@Autowired
@Qualifier("liSpringServiceEatMeat")
private LiSpringServiceEat liSpringEat;