美文网首页Spring
spring常用注解

spring常用注解

作者: 乐于吕 | 来源:发表于2019-12-12 17:32 被阅读0次

    本次主要介绍Spring注解。

          注解分为两类:

            1、一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;

            2、一类是注册Bean,@Component , @Repository , @ Controller ,@Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。

    工具/原料

    电脑

    第一步:注解使用Bean

    1

    @Autowired或者(  @Autowired(required=false))

    Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

    如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

    @Autowired() @Qualifier("baseDao")     

     private BaseDao baseDao;  

    1、required属性

      required属性值可以为true( 默认值)和false。如果为true的话,没有匹配的类则抛出异常;如果为false,则表示不是强制必须能够找到相应的类,无论是否注入成功,都不会抛错。

    2、工作原理

     注解解析器:AutowiredAnnotationBeanPostProcessor

    2.1、Spring容器启动时,AutowiredAnnotationBeanPostProcessor被注册到容器;

    2.2、扫描代码,如果带有@Autowired注解,则将依赖注入信息封装到InjectionMetadata中(见扫描过程);

    2.3、创建bean时(实例化对象和初始化),会调用各种BeanPostProcessor对bean初始化,AutowiredAnnotationBeanPostProcessor负责将相关的依赖注入进来;

    3、@Autowired扫描过程

    扫描当前类中标注@Autowired的属性和方法;

    再查找父类中注@Autowired的属性和方法,依次遍历;

    详解在不同场景使用的方式:https://blog.csdn.net/horacehe16/article/details/79811763

    2

    @Resource(这个注解属于J2EE的)

    1、默认安照名称进行装配,名称可以通过name属性进行指定, 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

     Java代码  

     @Resource(name="baseDao")     

     private BaseDao baseDao;     

    2、 推荐使用:@Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring的耦合。最重要的这样代码看起就比较优雅。

    3. 只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

    4. 既指定了@Resource的name属性又指定了type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

    END

    第二步:注册Bean

    @component 

    1、把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>

    2、下面写这个是引入component的扫描组件 

    <context:component-scan base-package=”com.mmnc”>

    3、和@Bean的区别

    @Component被用在要被自动扫描和装配的类上。

    @Bean主要被用在方法上,来显式声明要用生成的类。

    现在项目上,本工程中的类,一般都使用@Component来生成bean。在把通过web service取得的类,生成Bean时,使用@Bean和getter方法来生成bean。

    @Repository

    1、@Repository跟@Service,@Compent,@Controller这4种注解是没什么本质区别,都是声明作用,取不同的名字只是为了更好区分各自的功能.

    2、因为接口没办法在spring.xml中用bean的方式来配置实现类吧(接口配不了),所以只能用注解或者mybatis.xml中扫描bean的方式来生成实现类。

    3、@repository是用来注解接口

    4、时候我们不用@repository来注解接口,我们照样可以注入到这个接口的实现类 如 图3,4 原因是我们在xml文件中扫描了其所在的包,并注册到spring容器中

    @ Controller

    1、@ Controller和@RestController都是标识一个类为控制器(类似于servlet)。只不过@RestController标识当前类方法返回值默认都转为json串。

    2、@ Controller标识类的方法上注解@ResponseBody表示返回json数据,也就是将返回值转为json字符串。

    @Service

    相当于在xml配置:

    <bean id="courseDAO"         class="com.hzhi.course.dao.CourseDAOImpl" scope="prototype">  </bean>  

    @Configration

     @Configuration 的注解类表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源

    @WebListener

    注册监听器的注解:可以、参考:spring-boot 如何写监视器

    3spring-boot 如何写监视器

    END

    注意事项

    本次介绍是在spring开启注解的基础上或者使用springboot开启注解。

    相关文章

      网友评论

        本文标题:spring常用注解

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