您的位置:首页 > 编程语言 > Java开发

spring下的几种注解

2015-08-15 11:32 495 查看
spring中存在以下几种常见的注解:

@Component、@Repository、@Service、@Controller、@Resource、@Autowired、@Qualifier

注解说明:

|- - -| @Repository: 用于标注数据访问组件,即DAO组件。

|- - -| @Service: 用于标注业务层组件(我们通常定义的service层就用这个)。

|- - -| @Contrller: 用于标注控制层组件

|- - -| @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

以上几个注解是当你需要定义某个类为一个bean,则在这个类的类名前一行使用以上注解中的一种,如@Service(“XXX”),就相当于将此类定义为一个bean,bean名称为XXX; 这几个是基于类的,我们可以定义名称,也可以不定义,不定义会默认以类名为bean的名称(类首字母小写)。

注解使用

当我们需要在某个类中定义被注解标注的类作为一个属性时,我们则要使用以下三个注解:

@Resource、@Autowired、@Qualifier

再讲解使用之前,先编写几个类:

//控制层
@controller
public class TestController
{
public void say()
{
System.out.println("I am a good boy");
}
}


//service层
@service
public class TestService
{
@Resource
private Dao Dao;
public void add(){
Dao.add();
}


//定义Dao接口
public interface Dao {
public void add();
}


//定义实现DAO类,DAO层
@Repository
public class DaoImpl implements Dao{
public void add(){
System.out.println("调用了dao");
}
}


回到前面说的,当需要在某个类中定义被注解的类作为属性时,我们则可以使用@Resource或@AutoWired,比如

@Resource
private Dao dao;


@Autowired
private Dao dao;


它们的区别如下:

@Resource,它是javax.annotation.Resource; 这个包中,也就是说是javaEE中的,并不是spring中的,而且@Resource(“xxx”) 是可以定义bean名称的,就是说我这个属性要用那个bean来赋值。

@Autowired,它是org.springframework.beans.factory.annotation.Autowired 是这个包中,它是spring的包中的,而且它没有@Autowired(“xxx”),那我要为这个bean定义名称怎么办这个时候可以用@Qualifier(“xxx”), 这个也是spring中的。

我们在定义一个Dao的实现类DaoImpl2

@Repository
public class DaoImpl2 implements Dao{
public void add(){
System.out.println("调用了dao2");
}
}


此时,如果我们要使用DaoImpl2作为一个类的属性时,则必须要写成如下形式

@Resource
private Dao daoImpl2;


当被注解的类指定名称时,也就是@Repository(“???”)时,则我们必须写成如下形式

@Resource
private Dao ???;


也就是说,定义的属性名称必须与@Repository(“???”)中的名称保持一致。

另一种写法是:

@Resource(???)
private Dao * * *;




@AutoWired
@Qualifier(???)
private Dao * * *;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 注解