这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【springIOC注解】
【修真院java小课堂】springIOC注解
开场语:
大家好,我是IT修真院西安分院第4期的学员鲁伯良,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务一,深度思考中的知识点——springIOC注解
(1)背景介绍:
注解(Annotation),也叫元数据.一种代码级别的说明.它是jdk1.5及以后版本引入的一个特性与类,接口,枚举是在同一个层次.它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对元素说明注释。注解是以“@注解名”在代码中存在的。
(2)知识剖析:
元注解
四大元注解
@Retention、@Inherited、@Documented、@Target
@Retention
1.@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
2.@Target用来声明注解范围(枚举ElementType),ElementType可选值:
源码为:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
3.@Inherited
声明子类可以继承此注解,如果一个类A使用此注解,则类A的子类也继承此注解
4.@声明注解能够被javadoc等识别
自定义注解
定义自定义注解使用@interface 关键字
public @interface 注解名 {定义体}
一旦在自定义注解里面定义了成员变量之后,在使用该注解是就应该为该注解的成员变量指定值
如果只有一个参数成员,最好把参数名称设为"value",后加小括号。
也可以在自定义注解的成员变量的时候为其制定初始值,.(默认值),
(3)常见问题:
注解的使用场景
(4)解决方案:
(5)编码实战:
(6)拓展思考:
spring注解
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:
1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多
2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率
为了解决这两个问题,Spring引入了注解,通过”@XXX”的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。
如何使用
扫描
多个包逗号隔开。
常用注解
1、@Component
通用一般不推荐使用
2、@Controller
@Controller对应表现层的Bean
3、@ Service
@Service对应的是业务层Bean
4、@ Repository
@Repository对应数据访问层Bean
@Controller,@Service,@Component,@Repository
刨析
其中@Component是一种通用名称,泛指任意可以通过Spring来管理的组件,@Controller,@Repository则是一种特定的组件,通常用来表示某种特定场合下的组件,比如@Repository用来表示仓库(数据层,DAO),并且Spring 框架会根据这种应用场景做些定制,比如@Repository同时具备了自动化的异常转换。类似的, @Service则用来表示服务层相关的类, @Controller则用来表示展示层(presentation)的类。
(7)参考文献:
互联网
(8)更多讨论:
Q1::spring注解为什么要分层 A1::所有这些分层方式都是为了解决应用从小项目成长为大项目时可能遇到的隐患,代价是在项目还小时,增加了项目的复杂度,往往一句代码就能搞定的事情,却要拆到三个类中去。但是太多的实际例子表
Q2:@Compoent注解是可以通用的是吗?
A2:是的,不过为了层次分明我们不推荐这样使用?
Q3:什么情况下会用到自定义注解?
A3:自定义注解可以代替掉实体类的get set方法,验证对象的属性完整性.
(9)鸣谢:
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
更多内容,可以加入IT交流群565734203与大家一起讨论交流
这里是技能树·IT修真院:nofollow">https://www.jnshu.com,初学者转行到互联网的聚集地
原文链接:https://www.f2er.com/spring/67502.html