spring中基于Java容器配置注解的区别及使用场景

转载自百家号作者:有趣的代码

@Component、@Service、@Controller、@Repository;@Configuration、@Bean区别,使用场景

从spring3.0开始,基于javaconfig的项目,支持使用java来定义bean,而不是传统的xml文件。@Component是一个通用的stereotype,可以用于任何受容器管理的bean。而@Service、@Controller、@Repository是用于特殊形式的@Component,注解在类型上,但本质是一样的。

在@Configuration中配合@ComponentScan使用,spring 自动检测stereotype类,然后在application context注册相应的bean definition。在运行时会生成CGLIB的子类,在调用父类方法前,子类会先查找缓存。从spring3.2开始,CGLIB已经被包含在spring中。

CGLIB的限制:

1、@Configuration注解的类不能是final;

2、从4.3开始,任何构造函数都允许在配置类上使用,包括使用@Autowired或用于默认注入的单个非默认构造函数声明。

3、若不想要CGLIB对bean的限制,则可以使用@Component作为配置类,跨方法的调用不会被拦截,因此你必须使用构造函数或方法级别的依赖注入。

@Bean注解在方法上,用于实现工厂方法。与@Configuration搭配使用,不同的方法(只new一次)代表相同的实例,可以用于内部bean的依赖只需要调用另一个bean相应的方法;而与@Component搭配使用,不同的方法(只new一次)代表不同的实例,即不能用于内部bean的依赖。

若是第三方服务想由spring容器管理,则需要使用@Bean注解提供工厂方法。若是自己的服务则可以注解@Component(@Service、@Controller、@Repository),由容器自动扫描。

 为了让学习变得轻松、高效,今天给大家免费分享一套Java教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的文件流操作

文件系统 FileSystem类的对象表示Java程序中的文件系统。 FileSystem对象用于执行两个任务: Java程序和文件系统之间的接口。 一个工厂用于创建许多类型的文件系统相关对象和服务。 FileSystem对象与平台相关。 创建文件系统 要获取默认的FileSystem对象&…

学习Java编程,英语对我们来说有多重要?

Java软件开发需要学英语吗?学软件开发大家都知道,动手写代码远远比那些个只看理论知识要强得多。很多人因为不懂软件开发流程,就会觉得软件开发肯定很难,实际上不然,软件开发并没有想象中的那么难,也完全没…

Java基础学习需要掌握哪些内容?

对于零基础或者打算开始学习Java编程的同学,首先要去学习Java基础课程的内容,那么Java基础课程有哪些呢?无非就是需要知道Java概述、Java语言基础、面向对象、异常处理、常用类、数组和集合、IO流、线程、反射等。 Java概述:你要知…

Java中高效判断数组中是否包含某个元素

如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在Stack Overflow中也是一个非常热门的问题。在投票比较高的几个答案中给出了几种不同的方法,但是他们的时间复杂度也是各不相同的…

最常问的Java面试题,有Get吗?

1. import java和javax有什么区别 刚开始的时候JavaAPI所必需的包是java开头的包,javax当时只是扩展API包来说使用。然而随着时间的推移,javax逐渐的扩展成为Java API的组成部分。但是,将扩展从javax包移动到java包将是太麻烦了,…

Java的类型擦除

一、各种语言中的编译器是如何处理泛型的 通常情况下,一个编译器处理泛型有两种方式: 1.Code specialization。在实例化一个泛型类或泛型方法时都产生一份新的目标代码(字节码or二进制代码)。例如,针对一个泛型list&…

如何高效学习java呢?

1.基础阶段的学习 在这个学习阶段你应该找一个好的基础学习视频,对着视频认真进行学习,每天自己要逼着自己学习,大学很容易让人颓废。边看还要变敲代码,不要用ide用记事本有利于后期的代码编写习惯,还要做好笔记哦。 …

Java中数组的初始化

一、什么是初始化 在Java程序开发中,使用数组之前都会对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用…

Java程序员如何不断提高自己的专业技能

1、一定要看书 现在学习Java变得比以前容易多了,除了有大量的视频教程外,还有专业的java培训机构,这都使学习变得更加傻瓜化,然而我要说的是,Java虽然变得越来越容易学,然而那只代表入门容易,并…

Java学习路线,你值得了解

Java学习路线,了解一下! 需要资料的欢迎加入学习交流群:9285,05736

_linux中curl命令详解-linux运维

linux中curl命令的使用详情:1、【curl url】获取该网址的文本信息;2、【curl -i url】获取该网址的文本信息以及协议头部信息;3、【curl -x proxy url】使用代理获取网页文本信息。linux中curl命令的使用详情:1、curl url(获取该网…

Java的重载与覆盖,傻傻分不清!

重载和覆盖是JAVA多态性的不同表现方式,其中重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的方法,他们或有不同参数个数或有不同参数类型。 在使用重载时需注意以下几点: 1)重载是通过参数来区分的…

python字符串_教你快速了解 Python 字符串

我们知道字符串是 Python 中最常用的数据类型。我们可以使用引号(或")来创建字符串。创建字符串很简单,只要为变量分配一个值即可。例如:var1 Hello World! var2 "Python Runoob"Python 访问字符串中的值Python 不支持单字符类型&#…

那些年踩过的Java异常,简直了!

1、NullPointerException 空指针异常,操作一个 null 对象的方法或属性时会抛出这个异常。具体看这篇文章:Java 避免空指针的 5 个案例。 2、OutOfMemoryError 内存异常异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最…

字体怎么安装到电脑上_文章还在使用电脑上的固定字体?这款字体软件超好用...

在我们平日里的工作以及生活当中,我们经常会看到一些文字的文档。但是,有的时候我们会因为文字在文档内太多单一,从而觉得枯燥乏味一点了都没有。尤其是在用电脑读文本小说、或者是说明文档的的时候,字体千篇一律,看着…

java面向对象多态特性

一、多态的概念 多态是继封装,继承之后,面向对象的三大特性。 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态。 java作为面向对象的语言&…

决策树 prepruning_智能建筑运维前探 AI天天见之五:决策树算法应用探索

点击上方“蓝字”关注我们,成为幸福的人~这是一个大街小巷热议人工智能的时代~人工智能犹如上世纪九十年代的互联网,以惊涛之势席卷大江南北、带动着产业革命。作为智慧建筑运维领域的专业服务商,有志于“用数字智能服务每个建筑,…

Java技术知识点的一些总结

边学习边记录,对于程序员来说真的是一个很好的学习习惯,下面是近期在学习java时总结的一些技术知识点。 第一讲,主要是Java环境变量的配置。搭建好环境才能干活。要理解什么是编译、什么是运行。编译是javac.exe程序在负责;运行则…

电脑机器人_【头条】厚积薄发!卡达电脑智能机器人之纸箱码垛机赋能智能工厂...

点击上方视频,观看卡达电脑“智能机器人之纸箱码垛机”现场运行视频。近年来,随着纸包装行业市场竞争加剧、订单交付时间变短、人工成本逐年增加、产品质量要求变高等挑战,使得纸箱包装智能化生产变得极为迫切。“软件硬件” 助力瓦楞纸箱包装…

如何参悟Java的三大框架

大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。 Java是世界第一编程语言,这已经达成共识,是毋庸置疑的真理。框架是程序员们必学的知识点,而且是十分重要的应用…