Spring系列6:spring注解,springMVC注解,springboot注解,

依赖注入DI有4种方式:
接口注入
setter注入
构造器注入
注解注入

Spring注解注入

原文:https://www.cnblogs.com/wangbin2188/p/9014400.html

不需要在Spring配置文件中声明Bean实例,但要在原有的基础上进行以下3个改变:

  1. 导入AOP的Jar包。注解的后台实现用到了AOP编程
  2. 更换配置文件头,添加相应的约束
  3. 在Spring配置文件中配置组件扫描器,用于在指定的基本包中扫描注解。

Spring系列6:spring注解,springMVC注解,springboot注解,_第1张图片
另外,Spring还提供了3个功能基本和@Component等效的注解:
 @Repository 用于对DAO实现类进行注解
 @Service 用于对Service实现类进行注解
 @Controller 用于对Controller实现类进行注解
之所以创建这三个功能与@Component等效的注解,是为了以后对其进行功能上的扩展,使它们不再等效。

2、 Bean的作用域@Scope

在类上使用注解@Scope,其value属性用于指定作用域。默认为singleton。
Spring系列6:spring注解,springMVC注解,springboot注解,_第2张图片

@Scope注解的作用详解

@Scope默认是单例模式,即scope="singleton"。

另外scope还有prototype、request、session、global session作用域。scope="prototype"多例

  • 1.singleton单例模式,

   全局有且仅有一个实例

  • 2.prototype原型模式,

   每次获取Bean的时候会有一个新的实例

  • 3.request  

        request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,

  • 4.session 

         session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

  • 5.global session

         global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。

 

request、session、global session使用的时候首先要在初始化web的web.xml中做一些配置:请参考原文
————————————————
原文链接:https://blog.csdn.net/tzbugs/...

3、 基本类型属性注入@Value

在属性上使用注解@Value,该注解的value属性用于指定要注入的值。
使用该注解完成属性注入时,类中无需setter。当然,若属性有setter,则也可将其加到setter上。
Spring系列6:spring注解,springMVC注解,springboot注解,_第3张图片

4、按类型注入域属性@Autowired,@Autowired是spring的注解

需要在域属性上使用注解@Autowired,该注解默认使用按类型自动装配Bean的方式。
使用该注解完成属性注入时,类中无需setter。当然,若属性有setter,则也可将其加到setter上。
Spring系列6:spring注解,springMVC注解,springboot注解,_第4张图片

5、按名称注入域属性@Autowired与@Qualifier

需要在域属性上联合使用注解@Autowired与@Qualifier。@Qualifier的value属性用于指定要匹配的Bean的id值。同样类中无需setter,也可加到setter上。

Spring系列6:spring注解,springMVC注解,springboot注解,_第5张图片

@Autowired还有一个属性required,默认值为true,表示当匹配失败后,会终止程序运行。若将其值设置为false,则匹配失败,将被忽略,未匹配的属性值为null。Spring系列6:spring注解,springMVC注解,springboot注解,_第6张图片

6、域属性注解@Resource,也就是说@Resource是java自带的注解

Spring提供了对JSR-250规范中定义@Resource标准注解的支持。@Resource注解既可以按名称匹配Bean,也可以按类型匹配Bean。使用该注解,要求JDK必须是6及以上版本。
(1)按类型注入域属性
@Resource注解若不带任何参数,则会按照类型进行Bean的匹配注入。
Spring系列6:spring注解,springMVC注解,springboot注解,_第7张图片

(2)按名称注入域属性
@Resource注解指定其name属性,则name的值即为按照名称进行匹配的Bean的id。
Spring系列6:spring注解,springMVC注解,springboot注解,_第8张图片

7、Bean的生命始末@PostConstruct与@PreDestroy

在方法上使用@PostConstruct,与原来的init-method等效。在方法上使用@PreDestroy,与destroy-method等效。
Spring系列6:spring注解,springMVC注解,springboot注解,_第9张图片

8、使用JavaConfig进行配置(替代的是applicationContext.xml)

JavaConfig,是在Spring 3.0开始从一个独立的项目并入到Spring中的。JavaConfig可以看成一个用于完成Bean装配的配置文件,只不过是程序员使用Java自己编写的。

Spring系列6:spring注解,springMVC注解,springboot注解,_第10张图片

Spring系列6:spring注解,springMVC注解,springboot注解,_第11张图片

Spring系列6:spring注解,springMVC注解,springboot注解,_第12张图片

Spring系列6:spring注解,springMVC注解,springboot注解,_第13张图片

9.使用junit4测试Spring

创建一个普通POJO类作为测试类。
需要在三个位置添加注解。
 在类头添加两个注解:
@RunWith(SpringJUnit4ClassRunner.class):用于指定运行环境
@ContextConfiguration(locations=“”):用于指定配置文件位置
将要测试的对象声明为成员变量,并在其头上添加注解。
Spring系列6:spring注解,springMVC注解,springboot注解,_第14张图片

总结:注解与XML共同使用注解的好处是,配置方便,直观。但其弊端也显而易见:以硬编码的方式写入到了Java代码中,其修改是需要重新编译代码的。
XML配置方式的最大好处是,对其所做修改,无需编译代码,只需重启服务器即可将新的配置加载。

若注解与XML同用,XML的优先级要高于注解。这样做的好处是,需要对某个Bean做修改,只需修改配置文件即可。当然,此时,Bean类要有setter或构造器。
原文链接:https://www.cnblogs.com/wangbin2188/p/9014400.html

你可能感兴趣的:(spring)