@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 {
//业务操作
}
// 用@Resource注解,注入userDao
@Resource(name = "userDao")
private BaseDao 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 区别