Spring入门篇学习笔记(3)
2016-07-23 10:19
721 查看
以下学习笔记内容来自慕课网视频《Spring入门篇》
第四章 Spring Bean装配下
4-1 Bean的定义及作用域的注解实现
4-2 Autowired注解说明1
4-3 Autowired注解说明2
4-4 Autowired注解说明3
4-5 基于Java的容器注解说明Bean
4-6 基于Java的容器注解说明ImportResource和Value
4-7 基于Java的容器注解说明Bean和Scope
4-8 基于Java的容器注解说明基于泛型的自动装配
4-9 Spring对JSR支持的说明
相关链接
@Conponent是一个通用注解,可以用于任何bean
@Repository,@Service,@Controller是更有针对性的注解
@Repository通常用于注解DAO类,即持久层
@Service通常用于注解Service类,即服务层
@Controller通常用于Controller类,即控制器层(通常在spring MVC中使用)
1. 元注解的概念(Meta-annotations)
许多Spring提供的注解可以作为自己的代码,即“元数据注解”,元注解是一个简单的注解,可以应用到另一个注解
在定义注解时,除了value(),元注解还可以有其他的属性,允许定制
2. 类的自动检测及Bean的注册
Spring可以自动检测类并注册Bean到ApplicationContext中
3.
通过在基于XML的Spring配置如下标签(请注意包含上下文命名空间)
仅会查找在同一个applicationContext中的bean
4. 类的自动检测及Bean注册
为了能够检测这些类并注册相应的Bean,需要下面内容
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor也会被包含进来
通常在开发时使用component-scan标签,很少使用annotation-config标签。
5. 使用过滤器进行自定义扫描
默认情况下,类被自动发现并注册bean的条件是:使用@Component,@Repository,@Service,@Controller注解或者使用@Component的自定义注解。
可以通过过滤器修改上面的行为,如:下面例子的XML配置忽略所有的@Repository注解并用“Stub”代替
还可以使用use-default-filters=”false”禁用自动发现与注册
type属性的类型
6. 定义Bean
扫描过程中组件被自动检测,那么Bean名称是由BeanNameGenerator生成的(@Component,@Repository,@Service,@Controller都会有个name属性用于显式设置Bean Name)
可自定义bean命名策略,实现BeanNameGenerator接口,并一定要包含一个无参数的构造函数
7. 作用域(Scope)
通常情况下自动查找的Spring组件,其scope是singleton,Spring2.5提供了一个标识scope的注解@Scope
也可以自定义scope策略,实现ScopeMetadataResolver接口并提供一个无参构造器
8. 代理方式
可以使用scoped-proxy属性指定代理,有三个值可选:no,interfaces,targetClass,默认是no
9. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation
@Required注解适用于bean属性的setter方法。
这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义或通过自动装配一个明确的属性值。这个注解在应用中并不常用。
2. Autowired注解
自动进行装配
可以将@Autowired注解为“传统”的setter方法。
可用于构造器或成员变量
默认情况下,如果因找不到合适的bean将会导致autowiring失败抛出异常,可以通过设置
每个类只能有一个构造器被标记为required=true。
@Autowired的必要属性,建议使用@Required注解(官方建议)。
3. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.injection
可以通过添加注解给需要该类型的数组(
可以用于装配key为String的Map。
如果希望数组有序,可以让给bean实现org.springframework.core.Ordered接口或使用@Order注解。
1. 使用Autowired注解需要注意的地方
@Autowired是由Spring BeanPostProcessor处理的,所以不能在自己的BeanPostProcessor或BeanFactoryPostProcessor类型应用这些注解,这些类型必须通过XML或者Spring的@Bean注解加载。
2. 数组及Map的自动注入的例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.multibean
按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以用于指定单独的构造器参数或方法参数
可用于注解集合类型变量。
在XML文件中使用qualifier
如果通过名字进行注解注入,主要使用的不是@Autowired(即使在技术上能够通过@Qualifier指定bean的名字),代替方式是使用JSR-250@Resource注解,它是通过其独特的名称来定义来识别特定的目标(这是一个与所声明的类型是无关的匹配过程)
因语义差异,集合或Map类型的bean无法通过@Autowired来注入,因为没有类型匹配到这样的bean,为这些bean使用@Resource注解,通过唯一名称引用集合或者Map的bean。
@Autowired适用于fields,constructors,multi-argument methods这些允许在参数级别使用@Qualifier注解缩小范围的情况。
@Resource适用于成员变量、只有一个参数的setter方法,所以在目标是构造器或一个多参数方法时,最好的方式是使用Qualifiers。
定义自己的Qualifier注解并使用。
使用XML配置文件的自定义注解。
2. 使用Qualifier的例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.multibean
@Bean标识一个用于配置和初始化一个由SpringIoC容器管理的新对象的方法,类似于XML配置文件的
可以在Spring的@Component注解的类中使用@Bean注解任何方法(仅仅是可以,这种方式不常用)。
上一点中,通常使用的是@Configuration。
2. @Bean的使用
3. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.javabased
1. 使用xml配置文件加载资源文件
2. 使用注解加载资源文件
3. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.javabased
@Bean默认的bean是单例的,即一个bean容器中只有一个对象。
Bean的作用域包括singleton、prototype、request、session、global session。可用@Scope(“xxx”)设置。
2. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.javabased
1. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
在spring4.0.5下正常运行,但是在其他版本可能不正常
包名:cw.springtest.beanannotation.javabased
2. 关于自定义qualifier注解CustomAutowireConfigurer
使用场景不多,可在特定的场景中使用。
CustomAutowireConfigurer是BeanFactoryPostProcessor的子类,通过它可以注册自己的qualifier注解类型(即使没有使用Spring的@Qualiifier注解)
该AutowireCandidateResolver决定自动装配的候选者:
每一个bean定义的autowire-candidate值
任何
@Qualifier注解及使用CustomAutowireConfigurer的自定义类型。
Spring还支持JSR-250@Resource注解的变量或setter方法,这是一种在Java EE 5和6的通用模式,Spring管理的对象也支持这种模式。
@Resource有一个name属性,并且默认Spring解释该值作为被注入bean的名称。
如果没有显式地指定@Resource的name,默认的名称是从属性名或者setter方法得出。
注解提供的名字被解析为一个bean的名称,这是由ApplicationContext中的CommonAnnotationBeanPostProcessor发现并处理的。
JSR250标准中还有@PostConstruct注解标识初始化方法,和@PreDerstroy注解标识销毁方法。
2. 使用JSR330标准注解
从Spring3.0开始支持JSR330标准注解(依赖注入注解),其扫描方式与Spring注入一致。
使用JSR330需要依赖javax.inject包
使用Maven引入方式如下图
3. @Inject
@Inject等效于@Autowired,可以使用于类、属性、方法、构造器
4. Named
如果想使用特定名称进行依赖注入,使用@Named
@named与@Component是等效的。
5. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.jsr。
Spring入门篇学习笔记(2)
Spring入门篇学习笔记(3)
第四章 Spring Bean装配下
4-1 Bean的定义及作用域的注解实现
4-2 Autowired注解说明1
4-3 Autowired注解说明2
4-4 Autowired注解说明3
4-5 基于Java的容器注解说明Bean
4-6 基于Java的容器注解说明ImportResource和Value
4-7 基于Java的容器注解说明Bean和Scope
4-8 基于Java的容器注解说明基于泛型的自动装配
4-9 Spring对JSR支持的说明
相关链接
第四章 Spring Bean装配(下)
4-1 Bean的定义及作用域的注解实现
从Spring3.0开始,Spring JavaConfig项目提供了很多特性,包括使用java而不是XML定义bean,比如@Configuration,@Bean,@Import,@DependsOn@Conponent是一个通用注解,可以用于任何bean
@Repository,@Service,@Controller是更有针对性的注解
@Repository通常用于注解DAO类,即持久层
@Service通常用于注解Service类,即服务层
@Controller通常用于Controller类,即控制器层(通常在spring MVC中使用)
1. 元注解的概念(Meta-annotations)
许多Spring提供的注解可以作为自己的代码,即“元数据注解”,元注解是一个简单的注解,可以应用到另一个注解
在定义注解时,除了value(),元注解还可以有其他的属性,允许定制
2. 类的自动检测及Bean的注册
Spring可以自动检测类并注册Bean到ApplicationContext中
3.
<context:annotation-config/>标签
通过在基于XML的Spring配置如下标签(请注意包含上下文命名空间)
仅会查找在同一个applicationContext中的bean
4. 类的自动检测及Bean注册
为了能够检测这些类并注册相应的Bean,需要下面内容
<context:component-scan>包含<context:annotation-config>,通常在使用了前者后,不用使用后者。
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor也会被包含进来
<context:component-scan>和<context:annotation-config>的区别是,前者可以扫描基于类的注解,后者只能在完成bean的注册之后,去处理bean中的方法或成员变量的注解。在使用前者后就已经包含了后者的所有功能。
通常在开发时使用component-scan标签,很少使用annotation-config标签。
5. 使用过滤器进行自定义扫描
默认情况下,类被自动发现并注册bean的条件是:使用@Component,@Repository,@Service,@Controller注解或者使用@Component的自定义注解。
可以通过过滤器修改上面的行为,如:下面例子的XML配置忽略所有的@Repository注解并用“Stub”代替
还可以使用use-default-filters=”false”禁用自动发现与注册
type属性的类型
6. 定义Bean
扫描过程中组件被自动检测,那么Bean名称是由BeanNameGenerator生成的(@Component,@Repository,@Service,@Controller都会有个name属性用于显式设置Bean Name)
可自定义bean命名策略,实现BeanNameGenerator接口,并一定要包含一个无参数的构造函数
7. 作用域(Scope)
通常情况下自动查找的Spring组件,其scope是singleton,Spring2.5提供了一个标识scope的注解@Scope
也可以自定义scope策略,实现ScopeMetadataResolver接口并提供一个无参构造器
8. 代理方式
可以使用scoped-proxy属性指定代理,有三个值可选:no,interfaces,targetClass,默认是no
9. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation
4-2 Autowired注解说明(1)
1. Required注解@Required注解适用于bean属性的setter方法。
这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义或通过自动装配一个明确的属性值。这个注解在应用中并不常用。
2. Autowired注解
自动进行装配
可以将@Autowired注解为“传统”的setter方法。
可用于构造器或成员变量
默认情况下,如果因找不到合适的bean将会导致autowiring失败抛出异常,可以通过设置
@Autowired(required=false)的方式避免。
每个类只能有一个构造器被标记为required=true。
@Autowired的必要属性,建议使用@Required注解(官方建议)。
3. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.injection
4-3 Autowired注解说明(2)
可以使用@Autowired注解那些众所周知的(Spring自己的)解析依赖性接口,比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,ApplicationEventPublisher,and MessageSource可以通过添加注解给需要该类型的数组(
Set<T>或
List<T>)的字段或方法,以提供ApplicationContext中的所有特定类型的bean。
可以用于装配key为String的Map。
如果希望数组有序,可以让给bean实现org.springframework.core.Ordered接口或使用@Order注解。
1. 使用Autowired注解需要注意的地方
@Autowired是由Spring BeanPostProcessor处理的,所以不能在自己的BeanPostProcessor或BeanFactoryPostProcessor类型应用这些注解,这些类型必须通过XML或者Spring的@Bean注解加载。
2. 数组及Map的自动注入的例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.multibean
4-4 Autowired注解说明(3)
1. @Qualifier按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以用于指定单独的构造器参数或方法参数
可用于注解集合类型变量。
在XML文件中使用qualifier
如果通过名字进行注解注入,主要使用的不是@Autowired(即使在技术上能够通过@Qualifier指定bean的名字),代替方式是使用JSR-250@Resource注解,它是通过其独特的名称来定义来识别特定的目标(这是一个与所声明的类型是无关的匹配过程)
因语义差异,集合或Map类型的bean无法通过@Autowired来注入,因为没有类型匹配到这样的bean,为这些bean使用@Resource注解,通过唯一名称引用集合或者Map的bean。
@Autowired适用于fields,constructors,multi-argument methods这些允许在参数级别使用@Qualifier注解缩小范围的情况。
@Resource适用于成员变量、只有一个参数的setter方法,所以在目标是构造器或一个多参数方法时,最好的方式是使用Qualifiers。
定义自己的Qualifier注解并使用。
使用XML配置文件的自定义注解。
2. 使用Qualifier的例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.multibean
4-5 基于Java的容器注解说明–@Bean
1. @Bean说明@Bean标识一个用于配置和初始化一个由SpringIoC容器管理的新对象的方法,类似于XML配置文件的
<bean/>。
可以在Spring的@Component注解的类中使用@Bean注解任何方法(仅仅是可以,这种方式不常用)。
上一点中,通常使用的是@Configuration。
2. @Bean的使用
3. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.javabased
4-6 基于Java的容器注解说明–@ImportResource和Value
使用@ImportResource和@Value注解进行资源文件读取。1. 使用xml配置文件加载资源文件
2. 使用注解加载资源文件
3. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.javabased
4-7 基于Java的容器注解说明–@Bean和@Scope
1. @Bean和@Scope@Bean默认的bean是单例的,即一个bean容器中只有一个对象。
Bean的作用域包括singleton、prototype、request、session、global session。可用@Scope(“xxx”)设置。
2. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.javabased
4-8 基于Java的容器注解说明–基于泛型的自动装配
1. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
在spring4.0.5下正常运行,但是在其他版本可能不正常
包名:cw.springtest.beanannotation.javabased
2. 关于自定义qualifier注解CustomAutowireConfigurer
使用场景不多,可在特定的场景中使用。
CustomAutowireConfigurer是BeanFactoryPostProcessor的子类,通过它可以注册自己的qualifier注解类型(即使没有使用Spring的@Qualiifier注解)
该AutowireCandidateResolver决定自动装配的候选者:
每一个bean定义的autowire-candidate值
任何
<bean/>中的default-autowire-candidates 。
@Qualifier注解及使用CustomAutowireConfigurer的自定义类型。
4-9 Spring对JSR支持的说明
1. @ResourceSpring还支持JSR-250@Resource注解的变量或setter方法,这是一种在Java EE 5和6的通用模式,Spring管理的对象也支持这种模式。
@Resource有一个name属性,并且默认Spring解释该值作为被注入bean的名称。
如果没有显式地指定@Resource的name,默认的名称是从属性名或者setter方法得出。
注解提供的名字被解析为一个bean的名称,这是由ApplicationContext中的CommonAnnotationBeanPostProcessor发现并处理的。
JSR250标准中还有@PostConstruct注解标识初始化方法,和@PreDerstroy注解标识销毁方法。
2. 使用JSR330标准注解
从Spring3.0开始支持JSR330标准注解(依赖注入注解),其扫描方式与Spring注入一致。
使用JSR330需要依赖javax.inject包
使用Maven引入方式如下图
3. @Inject
@Inject等效于@Autowired,可以使用于类、属性、方法、构造器
4. Named
如果想使用特定名称进行依赖注入,使用@Named
@named与@Component是等效的。
5. 例子
https://yunpan.cn/cBpG2up9FJRqx 访问密码 db7f
包名:cw.springtest.beanannotation.jsr。
相关链接:
Spring入门篇学习笔记(1)Spring入门篇学习笔记(2)
Spring入门篇学习笔记(3)
相关文章推荐
- 疯狂java的基本总结
- protobuf安装配置和编译成java文件教程(for mac)
- Struts2框架运行机制
- Java集合排序总结
- Spring事务管理--(一)数据库事务隔离级别与mysql引擎基础讲解
- 反转部分单向链表
- JavaSE基础(五)
- javaWeb项目中,SSM配置,使用namespace的话,JSP页面跳转的找不到指定的action
- Spring Cache 介绍
- Java之内部类语法详解(附源码)
- spring+mybatis 多数据源切换
- 获取SpringMVC上下文bean实例-SpringContextUtil
- Java中的Iterator(迭代器)的一般用法
- springmvc中解决post乱码
- Java-一直弄不懂public,private,final,static的区别
- 使用Activity.isfinishing()解决java.lang.IllegalArgumentException: View not attached to window manager
- Android开发随手记录-AS导出jar包 Android Studio生成包含assets的Jar 从Eclipse迁移到Android Studio,并打包指定文件到jar
- 演示MP3的复制。通过IO流缓冲区。
- Java中删除文件、删除目录及目录下所有文件
- springmvc拦截器