spring常用注解

本次主要介绍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开启注解。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容