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

spring 常用注解关系(@Component,@Controller,@Service,@Repository,@Autowired,@Resource),@Qualifier

2016-11-09 00:00 1661 查看

@Component

spring会把@Component注解的对象,当成Bean加载。@Component是所有组件的总的注解,现在可以具体成更具体的组件注解 @Controller @Service @Repository,已不推荐使用。

@Controlloer & @RequestMapping

标记该注释的类,会拦截指定url,并进行操作。所以通常会配以 @RequestMapping("index")。

@Controller
@RequestMapping("/index")
public String indexController(){
// 业务操作
return "index";
}

上面的例子的含义是,spring会通过@Controller注解找到该组件。当spring收到请求(url为 http://yourhost:8080/index)时,根据@RequestMapping中注册的("index"),使用该组件处理该请求。

@Service & @Resource

标记@Service注解的类,会被spring加载,然后供@Controller组件调用。

下述代码调用关系:UserService为定义的接口服务,在被Controller调用时,实际上调用的是UserService的实现UserServiceImpl。

//用@Service注解,标记自己的提供服务时的名字
@Service("userService")
public class UserServiceImpl implements UserService {
………
}

//以下代码为controller类中的片段,调用刚才注册的service
@Resource(name = "userService")
private UserService userService;

上述代码的意思是,在controller中调用userService时,指定用UserServiceImpl来实现userService

@Repository & @Resource

标记@Repository注解的类,会被spring加载,然后供@Service组件调用。

// 用@Repository注解,标记自己提供服务时的名字
@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {
//业务操作
}

// 用@Resource注解,注入userDao
@Resource(name = "userDao")
private BaseDao<User> userDao;

#@Autowired
如果组件类(如UserService)和其实现类(如UserServiceImpl)为唯一对应关系,则可以用@Autowired注释简化。
以上述@Service & @Resource 代码为例,由于一个UserService只有一个唯一的实现UserServiceImpl,所以Controller在调用UserService时,完全可以不用@Resouce来指定调用关系,此处用@Autowired,就可以让spring自己找到UserServiceImpl。代码改造如下:

//用@Service注解,不需要提供service的名字
@Service
public class UserServiceImpl implements UserService {
// 业务代码
}

//以下代码为controller类中的片段,此处直接使用了@Autowired代码,因为UserService只有一个实现类UserServiceImpl,所以spring能够自动找到该实现类,不再需要用@Resource显式指定由谁实现UserService
@Autowired
private UserService userService;

#@Qualifer
与@Autowired组合使用,效果相当于@Resource,即 @Autowired+@Qualifier = @Resource。
还是上述@Service & @Resource 代码为例,其中第二段代码可以等价于以下代码:

//用@Service注解,标记自己的提供服务时的名字
@Autowired
@Qualifier("userService")
// @Resource("userService"),此处被替换成了  @Autowired + @Qualifier("userService")
public class UserServiceImpl implements UserService {
………
}

参考链接:
1.spring常用注解
2.@Resource & @Qualifier 区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring
相关文章推荐