1. Bean 的命名
可以用id name 来标识一个 Bean。如果定义一个Bean的时候既没有给定 id 也没有给定 name。
那么默认的采用 类的全限定名字作为 bean 在内存中的名称。
2. 依赖注入
(1)属性注入。要求Bean 提供一个默认的构造函数,并为需要的属性提供对应的Setter 方法。
(2)构造函数注入。构造函数注入是除属性注入之外的另一种常用的注入方式。它保证一些必要的属性在Bean
实例化时就得到设置,它保证了Bean 实例在实例化后就可以使用。Java 的反射机制并不会记住构造函数的入参名,
因此我们无法通过指定构造函数的入参名进行构造函数注入的配置,而只能通过入参类型和索引信息间接确定构造函数
配置项和入参的对应关系。
有时候需要联合使用类型和索引 来确定具体的使用那个构造函数。
通过自身类型反射匹配入参
如果Bean 构造函数入参的类型是可辨别的(非基础数据类型且入参类型各异),由于Java 反射机制可以获取构造函
数入参的类型,即使构造函数注入的配置不提供类型和索引的信息,Spring 依旧可以正确地完成构造函数的注入工作。
构造函数的循环依赖注入
需要将构造函数注入方式调整为属性注入方式。
(3)工厂方法注入
非静态工厂方法和静态工厂方法
3. Java 属性变量命名的规则。一般情况下要求属性变量名都以小写字母开头,但是考虑到一些特定意义的大写英文缩略词
(USA XML)JavaBean 的命名规范允许大写字母起头的属性变量名,不过必须满足“变量的前两个字母要么去不大写
要么全部小写”。
4. 注入参数详解
在Spring 配置文件中,用户不但可以将String、int 等字面值注入到Bean 中,还可以将集合、Map等类型的数据注入到Bean
中,此外还可以注入配置文件中其他定义的Bean。
![CDATA[]] 为XML的特殊处理标签。让XML 解析器将标签中的字符串当作普通的文本对待。XML 中的五个特殊字符:&<>"'。
对特殊字符的处理:(1)![CDATA[]](2)使用 XML的转义序列表示这些特殊的字符。
注意:一般情况下,XML 解析器会忽略元素标签内部字符串的前后空格,但是Spring 却不忽略元素标签内部字符串的前后空格。
5. 引用其他Bean。
<!-- 引用其他 Bean -->
<bean id="boss" class="com.babaotao.beanfactory.Boss">
<property name="car">
<ref bean="car1"/>
</property>
</bean>
bean:通过该属性可以引用同一容器或父容器的 Bean。
local:通过该属性只能引用同一配置文件中定义的 Bean。它可以利用XML 解析器自动检验引用的合法性,以便在开发编写配置
时能够及时发现并纠正配置的错误。
parent:引用父容器中 Bean 。
null 值:为属性设置一个null 值的注入值
<property name="brand"><null /></property>
6. 集合类型的属性
7. 使用p 命名空间。
为了简化XML 的配置,越来越多的XML 文件采用属性而非子元素配置信息。
8. 自动装配
<beans> 元素标签中的 default-autowire 属性可以配置全局自动匹配,default-autowire 属性的默认值为 no,表示不启用
自动装配,其他几个可选的配置分别为:byName,byType,constroutor,autodetect。不过在<beans> 中定义的自动装配策略
可以被 <bean> 自动装配策略覆盖。
9. <bean> 之间的关系。
10. 整合多个配置文件。
<import resource="classpath:com/baobaotao/beanfactory/beans.xml" />
11. Bean 的作用域。
Bean 的作用域将对Bean 的生命周期和创建方式产生影响。singleton, prototype, request, session, globalSession。
Singleton 作用域是重要的设计模式之一。如果用户不希望在容器启动时提前实例化 singleton 的Bean ,可以通过lazy-init 属性
进行控制。
<bean id="test" class="com.baobaotao.scope.Boss" p:car-ref="car" lazy-init="true" />
lazy-int 的Bean 在某些情况下还是会提前实例化。如果该Bean 被其他需要提前实例化的Bean 引用。
prototype 指定非单实例域的 Bean。在默认情况下,Spring 容器在启动时不实例化 prototype 的 Bean。此外, Spring 容器
将 prototype 的 Bean 交给调用者后,就不再管理它的生命周期了。
web 应用环境相关的 Bean 的作用域。
如果用户使用 Spring 的 WebApplicationContext 则还可以使用剩下的三种 Bean 作用域。不过需要做 额外的配置。
在低版本的 Web 容器中(Servlet 2.3)用户可以使用 HTTP 请求过滤器进行配置:
<web-app>
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>*/</url-pattern>
</filter-mapping>
</web-app>
在高版本的 Web 容器中,可以利用 HTTP 请求监听器进行配置:
<web-app>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</web-app>
12. FactoryBean。
13. 基于注解的配置。
@Component 等效的注解:
@Repository 注解 DAO 实现类
@Service 注解 Service 实现类
@Controller 注解 Controller 实现类
14. 使用注解配置信息启动 Spring 容器。
<context:component-scan base-package="com.baobaotao.web" />
扫描类包以应用注解定义的 Bean。
过滤元素
<context:include-filter type="regex" expression="" />
<context:exclude-filter type="aspectj" expresssion="" />
15. 自动装配 Bean。
Spring 通过 @Autowired 注解实现 Bean 的依赖注入。
当希望 Spring 容器即使找不到@Autowired 注入的类也不要报异常,可以使用 @Autowired(required=false)
如果容器中有一个以上的匹配的 Bean 时,则可以通过 @Qualifier 注解限定 Bean 的名称。
@Autowired
@Qualifier("userDao")
private UserDao userDao;
对类的方法进行标注
@Autowired
public void setLogDao(LogDao logDao) {
this.logDao = logDao;
}
@Autowired
@Qualifier("userDao")
public void setUserDao(UserDao userDao) {
this.uerDao = userDao;
}
16. Spring允许对方法的入参标注 @Qualifier 指定入 Bean 的名称。
@Autowired
public void init(@Qualifier("userDao")UserDao userDao, LogDao logDao) {
......
}
一般情况下,在 Spring 容器中大部分的 Bean 都是单实例的,所以我们一般都无需通过注解的 value 属性为
Bean 指定名称,也无需使用 @Qualifier 指定 Bean。
17. 对集合类进行标注
如果对类中的集合类的变量或方法入参进行@Autowired 标注, Spring 会将容器中类型匹配的所有 Bean 都自动注入进来。
@Autowired 按类型匹配注入 Bean。@Resource 按名称匹配注入 Bean。
18. Bean 的作用范围及生命过程方法。
@Scope("prototype")
@Component
public class Car {
......
}
在 <bean> 进行配置的时候,我们可以通过 init-method 和 destory-method 属性指定 Bean 的初始化及容器销毁前执行
执行的方法。Spring 从 2.5 开始支持注解配置上述方法:@PostConstruct->init-method, @PreDestroy->detory-method。
19. 基于 Java 类的配置。
分享到:
相关推荐
自己看完Spring4.X企业开发实战做的笔记,还附带目录,这个是第二个压缩包,要两个一起下载解压。希望能够帮助到大家。
Spring4.x企业应用开发实战, 自己看完这本书做的笔记,都是一些精华知识,还自己加了目录结构,方便以后查找相关知识点,欢迎一起学习探讨。 由于文件上传限制,分为了两个文件上传
SpringFramework5.0.x源码学习笔记.pdf,这是一份SpringFramework5.0.x的源码学习笔记,主要通过debug方式学习Spring的核心技术ioc和aop的实现原理
非常好的spring3.X ppt 讲解很详细 非常适合学习
基于注解的spring_3.0.x_MVC学习笔记
springboot3.x springsecurity6.x 实战教程,可用于生产项目工程 本地账号、手机号、邮箱多账号登录,账号与用户信息分离表结构设计,区别于常见表设计方法
Spring学习笔记...............345 第一章 Spring概述..........................345 第二章 Spring IOC(控制反转)........347 第三章 Spring AOP(面向切面编程)..........351 第四章 Spring中的数据访问.............
计算机软件编程学习笔记: 01. Unix note.txt 02. SQL note.txt 03. PL SQL note.txt 04. CVS note.txt 05. Core Java exercise.txt 05. Core Java note.txt 06. OOAD & UML note.txt 07. Xml note.txt 08. JDBC ...
Spring学习笔记...............345 第一章 Spring概述..........................345 第二章 Spring IOC(控制反转)........347 第三章 Spring AOP(面向切面编程)..........351 第四章 Spring中的数据访问.............
本人springboot学习笔记总结,根据视频初学,感兴趣可下载。
Spring Boot 作为一个被市场高度关注的微服务开发框架,版本j圭代十分频繁,这给我创作本书 带来了极大的挑战 。 本书出版前还有一个有趣的插曲,在本书初创时 Spring Boot 的最新正式版是 1.5.4 ,到我最初定稿时 ...
吴恩达老师的深度学习课程笔记及资源 Spring Boot基础教程 Spring Boot 2 x版本连载中 帮助 Android App 进行组件化改造的路由框架 最接近原生APP体验的高性能框架基于Vue3 Element Plus 的后台管理系统解决方案...
基于Spring5.x的源码深度解析PDF 学习笔记,经典收藏版本非常适合想深入了解Spring原理的童鞋
记录了自己学习《spring2.x企业开发》的笔记,包括一些spring的基础知识。
本文是个人在学习过程中的学习笔记,详细讲解了如何使用iBatis2.x以及如何将其与Struts2.x,Spring3.x进行整合开发,其中包括iBatis基础使用,存储过程调用和数据库函数的调用。
这是本人多年积累的学习笔记,记录详细、内容宽广,对新手高手都会有所帮助 作者: 冯万里(Holemar) 邮箱: daillow@gmail.com QQ: 292598441 MSN: daillo@live.cn 更新日期: 2011-12-21 文档都可以用文本编辑器...
学习笔记::books:JAVA,Spring,SpringMVC,SpringBoot,Mybatis,Vue,MySQL,MongoDB,Radis,Docker,Nginx,......笔记
此存储库包含有关对Spring Framework(v5.2.x)和Spring Boot(v2.4.x)的源代码进行分析的学习笔记。 我试图使这些注释尽可能地易于理解,因此,我主要将这些注释组织成图表,并结合一些微小的代码片段,以使说明...
JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的...