Spring 中注解,java 电话面试技巧
3、@ Service
@Service 对应的是业务层 Bean,例如:
1 @Service("userService")
2 public class UserServiceImpl implements UserService {
3 ………
4 }
@Service(“userService”)注解是告诉 Spring,当 Spring 要创建 UserServiceImpl 的的实例时,bean 的名字必须叫做”userService”,这样当 Action 需要使用 UserServiceImpl 的的实例时,就可以由 Spring 创建好的”userService”,然后注入给 Action:在 Action 只需要声明一个名字叫“userService”的变量来接收由 Spring 注入的”userService”即可,具体代码如下:
1 // 注入 userService
2 @Resource(name = "userService")
3 private UserService userService;
@Resource 注解去标注,并且指明了其 name = “userService”,这就等于告诉 Spring,说我 Action 要实例化一个“userService”,你 Spring 快点帮我实例化好,然后给我,当 Spring 看到 userService 变量上的 @Resource 的注解时,根据其指明的 name 属性可以知道,Action 中需要用到一个 UserServiceImpl 的实例,此时 Spring 就会把自己创建好的名字叫做”userService”的 UserServiceImpl 的实例注入给 Action 中的“userService”变量,帮助 Action 完成 userService 的实例化,这样在 Action 中就不用通过“UserService userService = new UserServiceImpl();”这种最原始的方式去实例化 userService 了。
如果没有 Spring,那么当 Action 需要使用 UserServiceImpl 时,必须通过“UserService userService = new UserServiceImpl();”主动去创建实例对象,但使用了 Spring 之后,Action 要使用 UserServiceImpl 时,就不用主动去创建 UserServiceImpl 的实例了,创建 UserServiceImpl 实例已经交给 Spring 来做了,Spring 把创建好的 UserServiceImpl 实例给 Action,Action 拿到就可以直接用了。
4、@ Repository
@Repository 对应数据访问层 Bean ,例如:
1 @Repository(value="userDao")
2 public class UserDaoImpl extends BaseDaoImpl<User> {
3 ………
4 }
@Repository(value=”userDao”)注解是告诉 Spring,让 Spring 创建一个名字叫“userDao”的 UserDaoImpl 实例。
当 Service 需要使用 Spring 创建的名字叫“userDao”的 UserDaoImpl 实例时,就可以使用 @Resource(name = “userDao”)注解告诉 Spring,Spring 把创建好的 userDao 注入给 Service 即可。
1 // 注入 userDao,从数据库中根据用户 Id 取出指定用户时需要用到
2 @Resource(name = "userDao")
3 private
BaseDao<User> userDao;
5.@ResponseBody
作用: 该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区。
使用时机:返回的数据不是 html 标签的页面,而是其他某种格式的数据时(如 json、xml 等)使用;
6.@Resource 和 @Autowired
@Resource 和 @Autowired 都是做 bean 的注入时使用,其实 @Resource 并不是 Spring 的注解,它的包是 javax.annotation.Resource,需要导入,但是 Spring 支持该注解的注入。
共同点
两者都可以写在字段和 setter 方法上。两者如果都写在字段上,那么就不需要再写 setter 方法。
不同点
(1)@Autowired
@Autowired 为 Spring 提供的注解,需要导入包 org.springframework.beans.factory.annotation.Autowired;只按照 byType 注入。@Autowired,spring 会根据类型去寻找定义的 Bean 然后将其注入
public class TestServiceImpl {
// 下面两种 @Autowired 只要使用一种即可
@Autowired
private UserDao userDao; // 用于字段上
@Autowired
public void setUserDao(UserDao userDao) { // 用于属性的方法上
this.userDao = userDao;
}
}
如果我们想使用按照名称(byName)来装配,可以结合 @Qualifier 注解一起使用
public class TestServiceImpl {
@Autowired
评论