1. Spring--注解回顾

Spring学完了有一段时间了,有时候,看到Spring里面的某些注解时会有点模棱两可的感觉,趁着今天周末,我就来回顾一下Spring相关的注解。

从广义上Spring注解可以分为两类:

  • 用于注册Bean
  • 用于使用Bean

1.1 用于注册Bean的注解

Spring注解开发

假如IOC容器就是一间空屋子,首先这间空屋子啥都没有,我们要吃大餐,我们就要从外部
搬运食材和餐具进来。这里把某一样食材或者某一样餐具搬进空屋子的操作就相当于每个注
册Bean的注解作用类似。注册Bean的注解作用就是往IOC容器中放(注册)东西! 用于注册。注册Bean的注解: 比如@Component , @Repository , @ Controller , @Service , @Configration
这些注解就是用于注册Bean,放进IOC容器中,一来交给spring管理方便解耦,二来还可以
进行二次使用(IOC容器中已经存在,就可以只要拿去用,而不必再去注册)。

补充:
为了更好的进行分层,Spring可以使用其它三个注解,功能同@Component,目前使用哪一个功能都一样。

  • @Controller:web层
  • @Service:service层
  • @Repository:dao层
  • @Configration:代表这是一个配置类

写上这些注解,就相当于将这个类交给Spring管理装配了!


1.2 用于使用Bean的注解

Spring:使用注解进行自动装配

用于使用Bean的注解:比如@Autowired , @Resource注解,这些注解就是把IOC容器中东西
自己拿来用,如果你要拿,前提 IOC容器 里有的,不然就会报错。

1.3 @Bean注解概述

Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管
理。 产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象
放在自己的IOC容器中。@Bean明确地指示了一种方法,什么方法呢?产生一个bean的方
法,并且交给Spring容器管理;从这我们就明白了为啥@Bean是放在方法的注释上了,因为
它很明确地告诉被注解的方法,你给我产生一个Bean,然后交给Spring容器,剩下的你就别
管了。记住,@Bean就放在方法上,就是让方法去产生一个Bean,然后交给Spring容器。

实际上,@Bean注解和xml配置中的bean标签的作用是一样的。


1.4 @Bean注解概述示例:

Spring–使用JavaConfig实现配置

首先,先定义一个实体类

Dog.java

package com.tian.pojo;public class Dog {public String name = "dog";
}

开始测试

TestAnno.java

package com.tian.config;import com.tian.pojo.Dog;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;public class TestAnno {/*** 通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id*/@Beanpublic Dog getDog() {return new Dog();}public static void main(String[] args) {ApplicationContext applicationContext =new AnnotationConfigApplicationContext(TestAnno.class);
//        这里传入的参数就是刚刚的方法名Dog dog = (Dog) applicationContext.getBean("getDog");System.out.println(dog.name);}
}

这段代码的运行结果为:


1.5 为什么要有@Bean注解

不知道大家有没有想过,用于注册Bean的注解的有那么多个,为何还要出现@Bean注解?

原因很简单:类似@Component , @Repository , @ Controller , @Service 这些注册Bean的
注解存在局限性,只能局限作用于自己编写的类,如果是一个jar包第三方库要加入IOC容器
的话,这些注解就手无缚鸡之力了,是的,@Bean注解就可以做到这一点!当然除了@Bean
注解能做到还有@Import也能把第三方库中的类实例交给spring管理,而且@Import更加方便
快捷。

使用@Bean注解的另一个好处就是能够动态获取一个Bean对象,能够根据环境不同得到不同的Bean对象。

1.6 @Bean注解总结

  • Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。 产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
  • @Component , @Repository , @ Controller , @Service 这些注解只局限于自己编写的类,而@Bean注解能把第三方库中的类实例加入IOC容器中并交给spring管理。
  • @Bean注解的另一个好处就是能够动态获取一个Bean对象,能够根据环境不同得到不同的Bean对象。
  • 记住,@Bean就放在方法上,就是让方法去产生一个Bean,然后交给Spring容器,剩下的你就别管了。

1.7 上面讲的都是注册Bean,下面来讲一下自动装配。

自动装配是使用spring满足bean依赖的一种方法
spring会在应用上下文中为某个bean寻找其依赖的bean。 Spring中bean有三种装配机制,分别是:

  • 在xml中显式配置;
  • 在java中显式配置;
  • 隐式的bean发现机制和自动装配。

这里我们主要讲第三种:自动化的装配bean。
Spring的自动装配需要从两个角度来实现,或者说是两个操作:

  • 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
  • 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;

组件扫描和自动装配组合发挥巨大威力,使得显示的配置降低到最少。


1.7.1 User类加构造方法

Dog.java

package com.tian.pojo;import org.springframework.stereotype.Component;@Component
public class Dog {public String name = "dog";
}

User.java

package com.tian.pojo;import org.springframework.stereotype.Component;/*** ClassName: User* Description: 这里创建了一个User类 , 里面有一个 dog 的属性** @author Administrator* @date 2021/6/5 23:11*/
@Component
public class User {private Dog dog;public User(Dog dog) {this.dog = dog;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}
}

测试类

TestAnno.java

package com.tian.config;import com.tian.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;/*** 组件扫描: spring会自动发现应用上下文中所创建的bean*/
@ComponentScan("com.tian.pojo")
public class TestAnno {public static void main(String[] args) {ApplicationContext applicationContext =new AnnotationConfigApplicationContext(TestAnno.class);
//        这里传入的参数就是刚刚的方法名User user = (User) applicationContext.getBean("user");System.out.println(user.getDog().name);}
}

运行结果:


1.7.2 User类不加构造方法

Dog.java

package com.tian.pojo;import org.springframework.stereotype.Component;@Component
public class Dog {public String name = "dog";
}

User.java

package com.tian.pojo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** ClassName: User* Description: 这里创建了一个User类 , 里面有一个 dog 的属性** @author Administrator* @date 2021/6/5 23:11*/
@Component
public class User {// 加了  @Autowired 后 ,可以不包含dog的构造方法@Autowiredprivate Dog dog;public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}
}

测试类

TestAnno.java

package com.tian.config;import com.tian.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;/*** 组件扫描: spring会自动发现应用上下文中所创建的bean*/
@ComponentScan("com.tian.pojo")
public class TestAnno {public static void main(String[] args) {ApplicationContext applicationContext =new AnnotationConfigApplicationContext(TestAnno.class);
//        这里传入的参数就是刚刚的方法名User user = (User) applicationContext.getBean("user");System.out.println(user.getDog().name);}
}

运行结果:



Spring--注解回顾相关推荐

  1. 浅谈Spring注解

    Spring目前的趋势是使用注解结合Java代码而不是配置来定义行为.属性.功能.规则和扩展点,因此梳理注解也是梳理Spring功能点的很好的方式,全面的梳理可以补足我们知识点的漏洞. 查找所有注解 ...

  2. 【Spring系列】 Spring注解方式实现IOC、DI及其Spring其他注解

    文章目录 注解回顾 JDK内置注解 自定义注解 1.声明一个注解类,由`@interface`修饰 2.通过元注解修饰注解的定义 `@Target`:(常用) `@Retention`:(常用) `@ ...

  3. spring注解驱动开发-10 Servlet3.0

    Spring AOP实现 前言 servlet3.0简介 ServletContainerInitializer shared libraries(共享库) / runtimes pluggabili ...

  4. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

  5. java spring注解教程,spring注解

    spring注解 扫描指定的包中的类上的注解,常用的注解有: @Controller 声明Action组件 @Service    声明Service组件    @Service("myMo ...

  6. java spring框架 注解_史上最全的java spring注解

    史上最全的java spring注解,没有之一 注解是个好东西,但好东西我们也是看见过,整理过,理解过,用过才知道好.不求我们每个都记住,但求保有印象,在需要的时候能提取出来再查找相关资料,平时工作就 ...

  7. java注解接收上传文件,前台:Input type=file 后台获取文件内容用的是spring注解,当地环境上传图片是好的,发布到服务器上图片读取不到,求大神指点...

    当前位置:我的异常网» Java Web开发 » 前台:Input type="file" 后台获取文件内 前台:Input type="file" 后台获取文 ...

  8. Spring 注解 @bean 和 @component 的区别, 你知道吗?

    本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等. Spring ...

  9. Spring注解创建Bean的几种方式

    Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...

  10. spring 注解试事物源码解析

    spring 注解试事物源码解析 基于xml注解式事务入口 public class TxNamespaceHandler extends NamespaceHandlerSupport {stati ...

最新文章

  1. 如何用LogQL在几秒内查询TB级的日志
  2. 同义词词林 java_基于同义词词林扩展版的词语相似度计算
  3. Java关键字synchronized详解
  4. 离散数学实验题目-图
  5. hiho一下第一周 Hihocoder #1032 : 最长回文子串
  6. 39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
  7. 终于可以放下心来了,呜呜...
  8. 拆分:分解单块系统——《微服务设计》读书笔记
  9. 数据结构与算法--5.Python实现十大排序算法
  10. c语言中width获取窗体宽度,获取屏幕宽高width(),outerWidth,innerWidth,clientWidth的区别...
  11. ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)
  12. centos 的网关和什么相同_CentOS操作系统:为什么转移到CentOS流是一个大错误
  13. python 2.7.9 安装beautifulsoup4
  14. Linux之安装虚拟机/虚拟操作系统[VisualBox]
  15. qlistview 自定义控件_qlistview使用自定义模型的复选框
  16. ARCHPR(暴力破解压缩包密码软件)
  17. python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...
  18. 计算机bios设置方法,bios功能怎么设置_bios设置图解教程
  19. 计算机excel实验总结,计算机概论excel实验报告.doc
  20. IP地址大全之IPV4版

热门文章

  1. Eclipse - Incompatible JVM. Version 1.8.0_261 of the JVM is not suitable for this product.
  2. Windows系统telnet命令怎么打开?Telnet命令详解
  3. linux nginx svn 安装
  4. 上周热点回顾(9.11-9.17)
  5. QCon北京免费专场报名!丨InfoQ粉丝福利
  6. linux下载软件失败,解决Ubuntu Kylin文件包下载失败的错误
  7. HTML5+CSS3 最酷的 loading 效果汇总
  8. 【华为OD机试真题】货币单位换算(C++javapython)100%通过率 超详细代码注释 代码优化
  9. ~~~~~~~~~~~~~人品计算器~~~~~~~~~~~~~~~~~~~~~~~
  10. 编码-数据库不支持特殊符号,特殊符号插入数据库报错解决方法