spring学习笔记一(基础特性)

sping学习

  spring的依赖注入机制,可以在运行期为组件配置所需资源,而无需再编写组件代码时就加以指定,所以降低了组件之间的耦合。比如spring配置文件中声明不同的bean实例,实例对应的类都是继承于同一个抽象类,可以再配置文件中直接指定不同继承类的传递参数。甚至,可以把要运行时调用的bean实例名字和参数写在properties配置文件中,动态去读取。依赖注入也更多的表现在bean实例之间的相互引用,作为属性把一个bean实例注入到另外一个bean实例里。

   spring的依赖注入和控制翻转来描述spring是比较生涩的,我认为spring使用了很多设计模式来实现的,也涉及了众多的技术范畴,比如mvc,orm以及remote interface等。spring是一个非强制性的框架,里面有许多独立的组件可以选择。

 Spring Bean的封装机制:

  org.springframework.beans包中包括了核心组件的实现类,核心中的核心为BeanWrapper和

BeanFactory类,这两个类是关键所在。

    关于Bean Wrapper:

org.springframework.beans包遵循Sun发布的JavaBean标准。JavaBean是一个简单的含有一个默认无参数构造函数的Java类, 这个类中的属性遵循一定的命名规范,且具有setter和getter方法。例如,某个类拥有一个叫做bingoMadness的属性,并同时具有与该属性对应的setter方法:setBingoMadness(..)和getter方法:getBingoMadness()。 如果你需要了解JavaBean规范的详细信息可以访问Sun的网站 (java.sun.com/products/javabeans)。

这个包中的一个非常重要的概念就是BeanWrapper接口以及它对应的实现(BeanWrapperImpl)。根据JavaDoc中的说明,BeanWrapper提供了设置和获取属性值(单个的或者是批量的),获取属性描述信息、查询只读或者可写属性等功能。不仅如此,BeanWrapper还支持嵌套属性,你可以不受嵌套深度限制对子属性的值进行设置。所以,BeanWrapper无需任何辅助代码就可以支持标准JavaBean的PropertyChangeListenersVetoableChangeListeners。除此之外,BeanWrapper还提供了设置索引属性的支持。通常情况下,我们不在应用程序中直接使用BeanWrapper而是使用DataBinder 和BeanFactory

BeanWrapper这个名字本身就暗示了它的功能:封装了一个bean的行为,诸如设置和获取属性值等。

   所以说:beanWrapper,实际就是反射生成类实例,并注入property,而且支持嵌套注入。

看看如何通过Spring BeanWrapper操作一个JavaBean

 

Object obj = Class.forName("net.xiaxin.beans.User").newInstance();

BeanWrapper bw = new BeanWrapperImpl(obj);

bw.setPropertyValue("name", "Erica");

System.out.println("User name=>"+bw.getPropertyValue("name"));

对比之前的代码,相信大家已经知道BeanWrapper的实现原理。

诚然,通过这样的方式设定Java Bean属性实在繁琐,但它却提供了一个通用的属性设定机制,而这样的机制,也正是Spring依赖注入机制所依赖的基础。

通过BeanWrapper,我们可以无需在编码时就指定JavaBean的实现类和属性值,通过在配置文件加以设定,就可以在运行期动态创建对象并设定其属性(依赖关系) 


Bean Factory:

  Bean Factory,顾名思义,负责创建并维护Bean实例。

1.Bean属性及依赖关系(对其他bean的引用)

2.Bean的创建模式(是否Singleton模式等等)

3.Bean的初始化和销毁

4.Bean的依赖关系

我们获得bean实例,由BeanFactory进行加载,并根据配置文件进行初始化和属性设定。对于一个Bean实例,其中属性值代表的意义如下:


 总结,BeanWrapper实现了针对单个Bean的属性设定操作,而BeanFactory则是针对多个Bean的管理容器,根据给定的配置文件,BeanFactory从中读取类名,属性名/值,然后通过Reflection机制进行Bean加载和属性设定。


 ApplicationContext:

 ApplicationContext覆盖了BeanFactory的所有功能,并提供了更多的特性如下:

1.国际化语言支持

2.资源访问

 支持对文件和URL的访问,比如ctx.getResource("classpath:xx.propeties");

3.事件传播

 事件传播特性为系统中状态改变时的检测提供了良好的检测。

 ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean时间的传播功能。通过

Application.publishEvent方法,可以将定义的时间event通知系统内所有的ApplicationListener。

4.多实例加载

  可以在同一个应用中加载多个Context实例。



Spring mvc 图示:



Spring mvc和页面框架配合使用:

1.xstl框架 2.freemarker框架 3.Velocity框架等


Spring的事务管理略


Spring的前端validate等略


Spring的Aop略




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值