Spring 3.X 学习笔记(一)


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 类的配置。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值