学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】
注解编程-第一章、注解基础概念1.什么是注解编程
指的是在类或方法上加入特定的注解(@XXX),完成特定功能的开发.
2.为什么要讲解注解编程
注解开发方便
代码简介 开发速度大大提高
Spring开发潮流
Spring2.x引入注解 Spring3.x完善注解 SpringBoot普及 推广注解编程
3.注解的作用
替换XML这种配置形式,简化配置
@Component 代替/等效配置中的bean对象
替换接口,实现调用双方的契约性
通过注解的方式,在调用者和功能提供者之间达成约定,进而进行功能的调用,因为注解应用更为方便灵活,所以在现在的开发中,更推荐通过注解的形式完成
4.Spring注解的发展历程
Spring2.x开始支持注解编程 @Component @Service @Scope
目的:提供这些注解只是为了在某些情况简化XML的配置,作为XML开发的有益补充
Spring3.x @Configuration @Bean
目的:彻底替换XML,基于纯注解编程
Spring4.x SpringBoot
提倡使用注解常见开发
5.Spring注解开发的一个问题
Spring基于注解进行配置后,还能否解耦合呢?
在Spring框架应用注解时,如果对注解配置的内容不满意,可以通过Spring配置文件进行覆盖。
第二章、Spring的基础注解(Spring2.x)
这个阶段的注解,仅仅是简化XML的配置,并不能完全代替XML
1.对象创建相关注解
- 搭建开发环境
作用:让Spring框架在设置的包下扫描对应的注解,使其生效
对象创建相关注解
- @Component
作用:替换原有Spring配置文件中的bean标签
注意:id属性 cmponent注解 提供了默认的设置方式 首单词首字母小写
class属性 通过反射获得class内容
@Component 代替/等效配置中的bean对象
@Component细节
如何显示指定工厂创建对象的id值
@Component(“u”) 参数可以设置id值
Spring配置文件覆盖注解配置内容
applicationContext.xml
@Component的衍生注解
@Repository 应用在DAO类型@Service 应用在Service类@Controller 应用在Controller类**注意:本质上这些衍生注解就是@Component 作用、细节、用法都是完全一致目的:更加准确的表达一个类型的作用注意:Spring整合Mybatis开发过程中 不使用@Repository @Component**
@Scope注解
作用:控制简单对象创建次数 等同于scope属性
注意:不添加@Scope,Spring还是会提供默认值singleton
@Lazy注解
作用:延迟创建单实例对象
注意:一旦使用了@Lazy注解后,Spring会在使用这个对象的时候,才进行对象的创建
生命周期方法相关注解
初始化相关方法 @PostConstruct
销毁方法 @PreDestroy
注意:1.上述的2个注解并不是Spring提供的,是JSR(JavaEE规范)520提供的
**2.再一次的验证,通过注解实现了接口的契约性**
2.注入相关注解
用户自定义类型注入 @Autowired
@AutoWired细节
Autowired注解基于类型进行注入[推荐]
基于类型的注入:注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)
Autowired加上Qualifier 可以基于名字进行注入[了解即可]
注入对象id值,必须与Qualifier注解中设置的名字相同
Autowired注解放置位置
- 放置在对应成员变量的set方法上
- 直接把这个注解放置在成员变量之上,Spring通过反射直接对成员变量进行注入(赋值)[推荐]
JavaEE规范中提供类似功能的注解
JSR250 @Resouce(name=”userDAOImpl”) 基于名字进行注入
注意:应用Resource注解时,名字没有配置成功,那么他会继续按照类型进行注入
JSR330 @Inject 作用 @Autowired完全一致 基于类型进入注入 —→EJB3.0
JDK类型
@Value注解完成
设置xxx.properties
id = 10
name = suns
Spring的工厂读取这个配置文件
代码
属性 @Value(“${key}”)
- @PropertySource
- 作用:用于替换Spring配置文件中的标签
- 开发步骤
设置xxx.properties
id=10
name=suns
应用@PropertySource
代码
属性@Value()
@Component@PropertySource("classpath:/init.properties")public class Category { @Value("${id}") private Integer id; @Value("${name}") private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
- @Value注解细节
- @Value注解不能给静态成员变量赋值
- @Value注解+Properties这种方式,不能注入集合类型
- Spring提供新的配置形式 YAML YML(SpringBoot)
3.注解扫描详解
当前包 及其 子包
1.排除方式
**type参数讲解**:assignable:排除特定的类型 不进行扫描annotation:排除特定的注解 不进行扫描aspectj:切入点表达式 包切入点:com.baizhi.bean..*类切入点:*.Userregex:正则表达式来进行排除custom:自定义排除策略排除策略可以叠加使用
实际开发中常用assignable、annotation、 aspectj(用的最多,切入点表达式)更方便
2.包含方式
和排除方式是相反的,它决定了哪些类的注解被Spring扫描
1. use-default-filters="false"作用:让Spring默认的注解扫描方式 失效2. 作用:指定扫描那些注解type:assignable:指定特定的类型 不进行扫描annotation:指定特定的注解 不进行扫描aspectj:切入点表达式 包切入点:com.baizhi.bean..*类切入点:*.Userregex:正则表达式来进行排除custom:包含的方式支持叠加
4.对于注解开发的思考
配置互通
Spring注解配置 配置文件的配置 互通
@Repositorypublic class UserDAOImpl{}public class UserServiceImpl{private UserDAO userDAO;set get..}ref会提示userDAO的选项
什么情况下使用注解 什么情况下使用配置文件
@Component 替换 <bean
基础注解(@Component @Autowired @Value) 程序员开发类型的配置
在程序员开发的类型上 可以加入对应注解 进行对象的创建
User UserService UserDAO UserAction
应用其他非程序员开发的类型时,还是需要<bean 进行配置的
SqlSessionFactoryBean MapperScannerConfigure
作者:扬眉剑出鞘
出处: https://www.cnblogs.com/eyewink/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。