zoukankan      html  css  js  c++  java
  • spring项目中常见注解

    1.  定义Bean的注解

    @Controller

    @Controller("Bean的名称")    定义控制层Bean,如Action

    @Service

    @Service("Bean的名称")    定义业务层Bean

    @Repository

    @Repository("Bean的名称")    定义DAO层Bean

    @Component

    定义Bean, 不好归类时使用.

    无论是DAO,Controller,Service三个层,都可以用这个注解,@Component,这个注解通用所有的Bean。

    这个时候你可能会说了,有通常的为什么用的人少呢,那是因为MVC这个分层的设计原则,用@Repository,@Service,@Controller,这个可以区别MVC原则中的DAO,Service,Controller。便于识别。

     

    2.  自动装配Bean (选用一种注解就可以)

    //  服务层
    @Service(“User”)
    public class UserServiceImpl implements UserService{};
    
    // 控制层
    @Controller
    public class userContriller {

    @AutoWired
    private
    UserService userService;


    @Resource
    private UserService userService;
    ................ 相关逻辑..............
    }

    @AutoWire  (spring 提供)

    根据 类型 注入,AutoWired 会根据 UserService 去查找 UserService 这个类 型以及其子类型。UserServiceImpl 实现了 UserService,所以能够找到它。

    不过这样有一个缺点,就是当 UserService 的实现类有两个以上的时候,这个时候不确定是哪个实现类而造成冲突,所以要用 @AutoWire 注入的时候要确保 UserService 只有一个实现类。

    @Resource   (J2EE 提供)

    @Resource(name ="***")  :  name后的名字去bean元素里查找有与之相等的name属性的bean。

    @Resource(type ="***")   :  从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

    @Resource   :  默认情况下是按照 名称 进行匹配,如果没有找到相同名称的Bean,则会按照类型进行匹配。

    有人可能会想了,这下好了,用这个是万能的了,不用管名字了,也不用管类型了,但这里还是有缺点。首先,根据这个注解的匹配效果可以看出,它进行了两次匹配,也就是说,如果你在 UserService 这个类上面写@Service ,它会怎么找呢,首先是找相同名字的,如果没有找到,再找相同类型的,而这里的 @Service 没有写名字,这个时候就进行了两次搜索,显然,速度就下降了许多。

    也许你还会问,这里的 @Service 本来就没有名字,肯定是直接进行类型搜索啊。其实不是这样的,UserServiceImpl 上面如果有 @Service 默认的名字 是这个 userServiceImpl,注意看,就是把类名前面的大写变成小写,就是默认的Bean的名字了。 @Resource 根据名字搜索是这样写 @Resource("userService"),如果你写了这个名字叫 userService,那么UserServiceImpl上面必须也是这个名字,不然还是会报错。

    @Autowired @Qualifie("user") 

    直接按照名字进行搜索,也就是说,对于 UserServiceImpl 上面 @Service 注解必须写名字,不写就会报错,而且名字必须是 @Autowired @Qualifie("user") 保持一致。如果 @Service 上面写了名字,而 @Autowired @Qualifie() ,一样会报错。

     

    3. 定义Bean的作用域和生命过程

    @Scope("prototype")

    值有 : singleton,prototype,session,request,session,globalSessio

    @PostConstruct

    相当于 init-method ,使用在方法上,当Bean初始化时执行。

    @PreDestroy

    相当于 destory-method ,使用在方法上,当Bean销毁时执行。

  • 相关阅读:
    PowerDesigner学习 ---- 系列文章
    PowerDesigner基础使用 ---- 入门学习
    PowerDesigner ---- 数据库设计(概念模型CDM和物理模型PDM)
    PowerDesigner V16.5 安装及汉化
    在树莓派是安装并配置NTP服务
    RESTful Web API 理解
    Linux或树莓派3——挂载U盘、移动硬盘并设置rwx权限
    开启树莓派自带的VNC功能
    c#代码获取web.config配置文件里面设置的 <compilation debug="true"节点
    WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式
  • 原文地址:https://www.cnblogs.com/zz-1q/p/10397631.html
Copyright © 2011-2022 走看看