Spring---那常用的注解

  • 前提
    必须在applicationContext.xml需要使用注解的包
<context:component-scan base-package="cn.gacl.java"/>

表明cn.gacl.java包及其子包中,如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。也可以在

<context:component-scan base-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>

1. @Controller
Controller对应表现层的Bean,也就是Action,例如:

@Controller
@Scope(value="prototype")
public class UserController {
    @Resource
    private UserService userService;
@RequestMapping(value="/login",method=RequestMethod.POST)
    public String login(User user,Model model) throws Exception {
        user=userService.checkLogin(user.getUserName(), user.getUserPassword());
        if(user!=null){
            model.addAttribute(user);
            return "loginsuccess";           
        }
        return "error";
    }

使用@Controller注解标识UserController 之后,就表示要把UserController 交给Spring容器管理,在Spring容器中会存在一个名字为”UserController “的action,这个名字是根据UserController 类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value=”UserController”)】或者【@Controller(“UserController”)】,则使用value作为bean的名字。

这里的UserController 还使用了@Scope注解,@Scope(“prototype”)表示将Action的范围声明为原型,可以利用容器的scope=”prototype”来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope=”singleton”),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope=”prototype” 可以保证当有请求的时候都创建一个Action对象

2.@ Service
@Service对应的是业务层Bean,例如:

@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    @Override
    public User checkLogin(String userName, String userPassword) {
         User user = userDao.selectUserByName(userName);
            if (user != null && user.getUserPassword().equals(userPassword)) {
                return user;
            }
            return null;
    }

@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做”userService”,这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的”userService”,然后注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”即可,具体代码如下:

// 注入userService
@Resource(name = "userService")
private UserService userService;
  1. @ Repository
    @Repository对应数据访问层Bean ,例如:
@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {
………
}

@Repository(value=”userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。

当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name = “userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。

 // 注入userDao,从数据库中根据用户Id取出指定用户时需要用到
 @Resource(name = "userDao")
 private BaseDao<User> userDao;

总结:
@ Repository–@ Service–@Controller
1.@Repository(value=”userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
2.@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做”userService”,这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的”userService”,然后注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”即可
3.@Controller
使用@Controller注解标识UserController 之后,就表示要把UserController 交给Spring容器管理,在Spring容器中会存在一个名字为”UserController “的action,这个名字是根据UserController 类名来取的。
在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值