美文网首页征服SpringSpring Boot
理解 Spring注解分类和解释

理解 Spring注解分类和解释

作者: 孔祥子看天下 | 来源:发表于2017-03-24 17:58 被阅读1469次

    理解 Spring

    Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。中间用到了各种注解,以及配置文件。依靠依赖注入和控制反转,让开发Java Web 非常方便!

    注解

    注解优点?注解解决了什么问题,为什么要使用注解?

    没有使用注解的时候,我们这样用
    <pre>
    public class UserManagerImpl implements UserManager {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
    }
    }
    </pre>

    配置文件
    <pre>
    <bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl">
    <property name="userDao" ref="userDao" />
    </bean>
    <bean id="userDao" class="com.zxy.test.spring.dao.UserDaoImpl">
    <property name="sessionFactory" ref="mySessionFactory" />
    </bean>
    </pre>

    使用注解
    <pre>
    public class UserManagerImpl implements UserManager {
    @Autowired
    private UserDao userDao;
    }
    </pre>

    注意:使用AutoWired自动连线注解需要添加
    <pre>
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
    </pre>

    也可以这样对方法进行注解
    <pre>
    public class UserManagerImpl implements UserManager {
    private UserDao userDao;
    @Autowired
    public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
    }
    }
    </pre>

    配置文件
    <pre>
    <bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" />
    <bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
    <property name="sessionFactory" ref="mySessionFactory" />
    </bean>
    </pre>

    注解分类和解释

    用注解来向Spring容器注册Bean。这样就可以省好多事情!
    开启注解
    <context:component-scan base-package="cn.zxy.test"/>

    <context:annotationconfig />将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。

    三种注解

    Spring 的基于注解实现Bean依赖注入支持如下三种注解

    Spring自带依赖注入注解

    Spring自带的一套依赖注入注解
    1 @Required:依赖检查;
    2 @Autowired:自动装配
    自动装配,用于替代基于XML配置的自动装配
    基于@Autowired的自动装配,默认是根据类型注入,可以用于构造器、字段、方法注入

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。

    @Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

    @Resource装配顺序
    如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
    如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
    如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
    如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2);
    如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配;

    @Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

    3 @Value:注入SpEL表达式
    用于注入SpEL表达式,可以放置在字段方法或参数上
    @Value(value = "SpEL表达式")
    @Value(value = "#{message}")
    4 @Qualifier:限定描述符,用于细粒度选择候选者
    @Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者
    @Qualifier(value = "限定标识符")

    如果两个类都实现了一个接口作为bean,这个时候有可能就无法区分bean的具体类型,就需要Qualifier!

    JSR-250注解

    Java平台的公共注解,是Java EE 5规范之一,在JDK6中默认包含这些注解,从Spring2.5开始支持。
    1 @Resource:自动装配,默认根据类型装配,如果指定name属性将根据名字装配,可以使用如下方式来指定
    @Resource(name = "标识符")
    字段或setter方法

    2 @PostConstruct和PreDestroy:通过注解指定初始化和销毁方法定义

    JSR-330注解

    JSR-330注解
    1 @Inject:等价于默认的@Autowired,只是没有required属性
    2 @Named:指定Bean名字,对应于Spring自带@Qualifier中的缺省的根据Bean名字注入情况
    3 @Qualifier:只对应于Spring自带@Qualifier中的扩展@Qualifier限定描述符注解,即只能扩展使用,没有value属性

    JPA注解

    用于注入持久化上下文和尸体管理器。

    JPA注解
    @PersistenceContext
    @PersistenceUnit

    @Service用于标注业务层组件

    @Controller用于标注控制层组件(如struts中的action)

    @Repository用于标注数据访问组件,即DAO组件

    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    相关文章

      网友评论

        本文标题:理解 Spring注解分类和解释

        本文链接:https://www.haomeiwen.com/subject/qqsfottx.html